Строка формата .Net для отображения в тысячах, но также включает разделитель запятой

#.net #format-string

#.net #формат-строка

Вопрос:

Я не видел примера объединения этих 2 понятий.

  1. Используйте «#,##0» для отображения числа с разделителями-запятыми (например, 1832567 отображается как 1,832,567).
  2. Используйте строку формата «0» для отображения числа в тысячах (например, 1832567 отображается как 1833).

Что делать, если я хочу показать то же самое число в тысячах и с разделителями-запятыми (например, 1,833)?

Я уверен, что есть способы сделать это с помощью формул / вычислений. Но я хотел бы знать, есть ли прямой способ с помощью строки формата?

Спасибо.

Комментарии:

1. Не уверен, что хорошо понял, но «#, # # 0» , похоже, делает то, что вы просили

2. @Steve #,##0 показывает 1,832,567 для ввода. Он хочет показать 1,833 себя .

3. @JoelCoehoorn с запятой в конце, dotnetfiddle.net/leoOnc

4. @Стив ницца. Вы должны добавить это в качестве ответа.

Ответ №1:

Этот формат будет выполнять то, что вы запросили

 "#,##0,"
 

как в

 Console.WriteLine(1832567.ToString("#,##0,"));
 

Вы можете увидеть пример на https://dotnetfiddle.net/leoOnc

Похоже, это описано здесь в строках пользовательского числового формата в разделе, посвященном спецификатору пользовательского формата «,», где говорится о том, как запятая может использоваться для обоих

Разделитель групп: если одна или несколько запятых указаны между двумя заполнителями цифр (0 или #), которые форматируют целые цифры числа, символ разделителя групп вставляется между каждой числовой группой в целочисленной части вывода.

Спецификатор масштабирования чисел: если одна или несколько запятых указаны сразу для слева от явной или неявной десятичной точки форматируемое число делится на 1000 для каждой запятой. Например, если строка «0,,» используется для форматирования числа 100 миллионов, выводится значение «100».

Комментарии:

1. Вот и все, спасибо, Стив! Я перешел по ссылке на этот документ, но не читал подробностей о пользовательских спецификаторах. Надо читать внимательнее 😉

Ответ №2:

Вы можете разделить на 1000,0, и первая строка формата удалит лишние символы:

 int foo = 1832567;
Console.WriteLine( (foo/1000.0).ToString("#,##0"));
 

Но это приводит к сбою части запроса «внутри строки формата». Возможно, это все еще можно квалифицировать как часть интерполированной строки, поскольку мы можем поместить все между фигурными скобками:

 int foo = 1832567;
Console.WriteLine($"{foo/1000.0:#,##0}");
 

Обратите .0 внимание, чтобы избежать целочисленного деления, которое усекло бы, а не округлило результат.

Комментарии:

1. Спасибо, Джоэл. Да, я хотел бы посмотреть, есть ли способ сделать это только с помощью формата. Похоже, что нет, поэтому мне придется выполнить вычисление. Это для отчета SSRS, поэтому гораздо проще применить один формат ко всем ячейкам, а не определять выражение для каждой ячейки (даже если выражение имеет одну и ту же конструкцию для всех полей).