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

2

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

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

Теги:
numbers
format
tostring

2 ответа

1
Лучший ответ

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

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

  • 0
    К сожалению, это не так в этом примере, потому что я генерирую входной DataTable в качестве примера для тестирования кода. Поле в этом случае определяется как dt.Columns.Add ("Cases", typeof (Int32)); с которым я обновлю свой вопрос.
  • 0
    Это тот случай? Я не могу хранить отформатированные данные в DataTable? Если это так, то почему я смог сделать это для других таблиц данных? Что я делаю, чтобы взять неформатированные данные, отформатировать их, а затем перенести в новую таблицу данных. Это первый пример, который мне не помог.
Показать ещё 3 комментария
0

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

  • 0
    Это работает, но не дает мне отформатированное число до нуля.
  • 0
    Если ваш DataTable содержит только целые числа, как там вообще есть десятичные знаки?
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню