Я пытаюсь преобразовать числа в форме 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" );