Странность с пользовательским форматированием чисел toString()

StackOverflow https://stackoverflow.com/questions/934260

Вопрос

Я пытаюсь преобразовать числа в виде 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 заключается в том, чтобы удерживать данные;не для того, чтобы это опровергнуть.Вы могли бы сохранить его предварительно отформатированным как strings, я думаю (до тех пор, пока ты рассказать это то, что столбцы являются строками) - но если вы сохраняете его как int, затем забудьте о дисплее;как только вы убежите Convert.ToInt32 твоя работа окончена.То, как это выглядит, зависит от DataGridView (или что там еще);рассказать это о "N0"...

Другие советы

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top