Странность с пользовательским форматированием чисел toString()
Вопрос
Я пытаюсь преобразовать числа в виде 123456 в 123 456, что я нахожу достаточно простым, используя метод .NET toString () с пользовательским форматом N0.
Однако в одном случае с данными я получаю странные форматы при использовании этого метода.
В этом случае я динамически генерирую DataTable для моей входной таблицы, чтобы протестировать код.
DataTable dt = new DataTable();
dt.Columns.Add("Cases", typeof(Int32));
Например, мои данные выглядят так до применения форматирования.
-------------------------------------------- | Cases | 2495 | 3937 | 3207 | 4173 | 4265 | --------------------------------------------
Я бы хотел, чтобы это выглядело вот так.
------------------------------------------------- | Cases | 2,495 | 3,937 | 3,207 | 4,173 | 4,265 | -------------------------------------------------
Я пытаюсь отформатировать его, используя следующий код.
output.Rows[r][c] = Convert.ToInt32(input.Rows[c - 1][r + 1]).ToString("N0");
(Примечание:Причина странного форматирования заключается в том, что я беру DataTable и переношу его в другой DataTable.)
Используя приведенное выше форматирование, я теперь получаю следующие возвращаемые данные.
-------------------------------------------------------------------------- | Cases | 01/02/0495 | 01/03/0937 | 01/03/0207 | 01/04/0173 | 01/04/0265 | --------------------------------------------------------------------------
Затем я попробовал это с одной десятичной запятой, используя:
output.Rows[r][c] = Convert.ToInt32(input.Rows[c - 1][r + 1]).ToString("N01");
Что дало мне следующий результат.
------------------------------------------------------ | Cases | 2495.0 | 3937.0 | 3207.0 | 4173.0 | 4265.0 | ------------------------------------------------------
Теперь это сбило меня с толку, потому что я принимаю тот факт, что число может быть отформатировано таким образом.
Следующее, что я попробовал, были различные способы форматирования строк следующим образом.
output.Rows[r][c] = string.Format("{0:N0}", input.Rows[c - 1][r + 1]);
output.Rows[r][c] = Convert.ToInt32(input.Rows[c - 1][r + 1]).ToString("#,##0");
Ни один из них также не дает числового формата, как мне бы хотелось.Кто-нибудь может посоветовать, в чем я ошибаюсь?Неужели это так просто, что я упустил главное?
Решение
Мне просто кажется, что вы задали тип данных для столбцов в DataTable
неправильно.Попробуйте сделать это явным в виде int
(это выглядит как DateTime
на данный момент).
Кроме того, - работа DataTable
заключается в том, чтобы удерживать данные;не для того, чтобы это опровергнуть.Вы могли бы сохранить его предварительно отформатированным как string
s, я думаю (до тех пор, пока ты рассказать это то, что столбцы являются строками) - но если вы сохраняете его как int
, затем забудьте о дисплее;как только вы убежите Convert.ToInt32
твоя работа окончена.То, как это выглядит, зависит от DataGridView
(или что там еще);рассказать это о "N0"...
Другие советы
Попробуйте использовать просто "N", как в toString("N");