Странность с пользовательским форматированием ToString () - PullRequest
2 голосов
/ 01 июня 2009

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

Ни один из них не дает числовой формат, как мне бы хотелось. Кто-нибудь может посоветовать, где я иду не так? Это так просто, что я упустил суть?

Ответы [ 2 ]

1 голос
/ 01 июня 2009

Мне просто кажется, что вы неправильно установили тип данных столбцов в DataTable. Попробуйте сделать его явным как int (на данный момент это выглядит как DateTime).

Также - работа DataTable заключается в удержании данных; не оспаривать это. Я думаю, вы можете сохранить его в предварительно отформатированном виде как string s (если вы скажете , что столбцы являются строками) - но если вы храните его как int, тогда забудьте о дисплее ; как только вы запустите Convert.ToInt32 ваша работа закончится. Как это выглядит - работа DataGridView (или чего бы то ни было); расскажите , что о "N0" ...

0 голосов
/ 01 июня 2009

Попробуйте использовать просто "N", как в ToString ("N");

...