C # Форматирование чисел с пробелами, разделяющими тысячи - PullRequest
0 голосов
/ 07 июня 2018

Я пытаюсь отформатировать десятичную с учетом следующих требований:

  • Тысячи разделены пробелами ""
  • Десятичная точка отделяется запятой "," (thisдостигается путем использования соответствующей культуры, в данном случае хорватского)
  • Есть две цифры после запятой.

Пока я получил это:

String.Format(new CultureInfo("hr-HR"), "{0:# ##0.00}", input)

Это хорошо работает, если число имеет 4 или более цифр перед десятичной точкой.Например, значение 5500,5 дает мне "5 500,50" и -5500,5 дает мне "- 5 500,50" ,это то, что я хочу.

Но если число содержит меньше цифр, я получаю пробел перед номером.Например, 500,5 дает мне "500,50" вместо "500,50" .А с отрицательным числом пробел ставится между знаком минус и цифрами: -500,5 дает мне "- 500,50" .Поэтому я не могу просто обрезать результат.Как мне достичь того, что мне нужно?

Ответы [ 2 ]

0 голосов
/ 07 июня 2018

Вы можете использовать пользовательский NumberFormatInfo для форматирования чисел.

var nfi = new NumberFormatInfo();
nfi.NumberGroupSeparator = " "; // set the group separator to a space
nfi.NumberDecimalSeparator = ","; // set decimal separator to comma

И затем отформатировать число, используя

number.ToString("N2", nfi); // numeric format with 2 decimal digits

Это дает вам

(5500.5).ToString("N2", nfi)  // "5 500,50"
(-500.5).ToString("N2", nfi)  // "-500,50"
(-5500.5).ToString("N2", nfi) // "-5 500,50"
0 голосов
/ 07 июня 2018

Самый простой подход может состоять в том, чтобы просто проверить, если input больше 1000 / меньше -1000, прежде чем форматировать его таким образом.

if(input >= 1000 || input <= -1000){
    // use String.Format(new CultureInfo("hr-HR"), "{0:# ##0.00}", input)
}else{
    // just use input.ToString()?
}

Возможно, есть способ принудить string.format к выполнениючто вы хотите, но зачем усложнять вопрос?

...