Форматирование чисел в разных культурах - PullRequest
4 голосов
/ 24 мая 2011

При условии инвариантной культуры , возможно ли определить другой разделитель групп в формате - запятая?

Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture;
Console.WriteLine(String.Format("{0:#,##0}", 2295));

Вывод:

2,295

Желаемый результат:

2.295

Требуется инвариантная культура, поскольку валюты из разных локалей форматируются с помощью строк форматирования, которые были определены пользователем.Т.е. для Дании они определили формат цены как "{0: 0}, -", а для Ирландии это может быть "€ {0: #, ## 0}".

Ответы [ 2 ]

9 голосов
/ 24 мая 2011

Если у вас разные строки формата, это не значит, что вы должны использовать InvariantCulture.Если у вас есть строка формата для Германии, например, вы форматируете эту строку, используя Культуру ("de-de"):

String.Format(CultureInfo.GetCultureInfo( "de-de" ), "{0:0},-", 2295) //will result in 2.295,-
String.Format(CultureInfo.GetCultureInfo( "en-us" ), "{0:0},-", 2295) //will result in 2,295,-

В качестве альтернативы вы можете указать свой собственный информация о формате чисел :

NumberFormatInfo nfi = new NumberFormatInfo( )
{
    CurrencyGroupSeparator = ":"
};
String.Format(nfi, "{0:0},-", 2295) //will result in 2:295,-
3 голосов
/ 24 мая 2011

Нормальным подходом было бы , а не использовать инвариантную культуру.

Вы задаете форматирование в стиле инварианта, но правильные символы будут заменены, #,##0.00 будет иметь вид 1.234,50 или 1,235.50 в зависимости отфактическая культура используется.

...