Как вы указываете необязательный разделитель тысяч в C #?

#c# #format #number-formatting

#c# #формат #форматирование чисел

Вопрос:

Я пытаюсь распечатать физические величины из decimal типа данных с точностью до 6 знаков после запятой. Я хочу, чтобы отображался разделитель тысяч, но только для чисел, которые>= 10 000 (или <= -10 000).

Например:

  • 100 -> 100
  • 1000 -> 1000
  • 9999 -> 9999
  • 10000 -> 10,000

Я использовал этот формат, но он не совсем правильный:

 myNumber.ToString("#,##0.######");
  

Есть ли хитрость в строке формата, чтобы разделитель тысяч отображался только в том случае, если слева от десятичного знака есть 5 или более цифр?

Ответ №1:

Я не думаю, что есть какой-то особый трюк, вам нужно будет сделать

 var result = myNumber >= 10000.0m || myNumber <= -10000.0m ? 
                 myNumber.ToString("#,##0.######") : 
                 myNumber.ToString("###0.######");
  

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

1. Спасибо. Я думаю, что ваши «d» должны быть «m».

2. @ScottWhitlock вы правы. По какой-то причине я думал, что ты myNumber двойной.

Ответ №2:

Вы могли бы использовать myNumber .toString(«n»), который должен соответствующим образом использовать текущую культуру и формат

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

1. извините, я только что заметил, что вы хотели, чтобы он применялся только для чисел свыше 10 000. В чем причина этого? Просто любопытно

2. Я не уверен, откуда он взялся, возможно, вкус, но требования к результату: 1000 или 10000. Они не хотят видеть 1000.

3. интересно. Для простоты было бы создать расширение, которое использует логику Bala R. тогда

4. Да, это то, что мне нужно будет сделать.

5. @AnthonyShaw: Это довольно распространенное форматирование, fe. в книгах я просто читаю параллелизм Windows, и они форматируют числа так: 5000, но 50 000. (другой разделитель, но то же правило) :).

Ответ №3:

Я не верю, что есть что-то «встроенное», но это тот случай, для которого были разработаны Iformatprovider и ICustomFormatter. См. Раздел iformatprovider .