Строка.Формат десятичной дроби с разделителями в тысячу и принудительными десятичными знаками

#c# #string #parsing #decimal

#c# #строка #синтаксический анализ #десятичная дробь

Вопрос:

Я бы хотел String.Format , чтобы десятичная дробь имела как тысячу разделителей, так и принудительные десятичные знаки (3).

Например:

Ввод:

 123456,12
78545,8
  

Вывод:

 123.456,120
78.545,800
  

Я пробовал

 String.Format("{0:0.0,000}", input);
  

но это дает только тысячу разделителей, но не принудительно вводит десятичные разряды.

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

1. Пользовательские числовые форматы не зависят от того, форматирует ли ваша культура десятичную точку точкой или запятой. Это было бы болезненно. Используйте, скажем, «{0:#,##0.000}» вместо этого.

Ответ №1:

В строке пользовательского числового формата точка ( . ) используется для «локализованного десятичного разделителя». Т.Е. даже если ваш текущий язык использует запятую в качестве десятичного разделителя, вы должны использовать точку в строке формата. Аналогично запятая ( , ) используется для локализованного разделителя тысяч.

Поскольку ваш формат ставит запятую после точки, все будет запутано (разделители тысяч не применяются после десятичной точки).

Так что попробуйте:

  String.Format("{0:#,##0.000}", input);
  

(Использование # для цифр только для включения if input достаточно велико.)

Ответ №2:

 String.Format("{0:N3}", input)
  

Смотрите Спецификатор формата N

Ответ №3:

Либо:

 string.Format("{0:N3}", input)
  

Или явно (без учета текущей культуры):

 string.Format("{0:#,##0.000}", input)