C # формат строки вопрос за деньги - PullRequest
2 голосов
/ 19 марта 2010

Мне нужно преобразовать строку в денежный формат {###}. ###. ###, ##

то есть

значение 5461497702600

станет

54.614.977.026,00

Числа становятся чрезмерно большими.

Я использую

return string.Format("{0:#" + (val < 1000 ? "" : "\\.") + "##0.00}", val);

, который возвращается для примера

54614977.026,00

(только одна точка)

Любая помощь будет оценена

Ответы [ 3 ]

4 голосов
/ 19 марта 2010

Это проще, чем кажется, просто используйте:

   decimal number = 5461497702600M;
   string s = string.Format("{0:#,##0.00}", number );

Здесь необходимо использовать decimal. Изображение #, ## 0,00 - это очень стандартный способ сделать это, при выводе будут использоваться системные символы по умолчанию, а всплывающее окно достаточно умное, чтобы при необходимости повторить группировку из 3 цифр. Используйте следующую перегрузку для указания культуры, в этом примере с InvariantCulture всегда будет использоваться десятичная точка:

 string s = string.Format(System.Globalization.CultureInfo.InvariantCulture, 
      "{0:#,##0.00}", number);
1 голос
/ 19 марта 2010

Вы можете использовать перегрузку ToString , которая принимает строку формата и IFormatProvider.

Затем просто используйте N2 в качестве строки формата и используйте CultureInfo - например, de-DE - с . в качестве разделителя групп и , в качестве десятичного символа:

return (val / 100).ToString("N2", new CultureInfo("de-DE"));

Осторожно, если val является целочисленным типом, а не типом с плавающей запятой, то деление на 100 потеряет две младшие цифры. Чтобы избежать этого, вы можете преобразовать целочисленное значение в decimal при делении:

return (val / 100M).ToString("N2", new CultureInfo("de-DE"));
0 голосов
/ 19 марта 2010

Я думаю, что вы пытаетесь сделать, зависит от текущей культуры / региональных настроек вашей машины. В вашем случае вы пытаетесь использовать COMMA как десятичный, а десятичный как COMMA, разделитель тысяч

...