Как отформатировать деньги, используя азиатский формат

2

В Индии и других азиатских странах деньги отформатированы следующим образом: Первые три цифры, сгруппированные в три, затем все остальные цифры сгруппированы в две пары. например: 2,54,255,12 5,22,54,255,12 и т.д. string money = String.Format( "{0: #, ## 0.00}", 254255.12);

дает выход 254,255.12

но требуемый выход - 2,54,255.12

Теги:
string
formatting

2 ответа

14
Лучший ответ

Используйте соответствующий спецификатор CultureInfo и спецификатор формата "c":

CultureInfo hindi = CultureInfo.CreateSpecificCulture("hi-IN");
string text = string.Format(hindi, "{0:c}", 254255.12);

Обратите внимание, что для значений валюты необходимо использовать decimal, а не double, чтобы избежать проблем с двойной точкой с плавающей запятой.

  • 1
    +1 никогда не используйте числа с плавающей точкой для расчетов в валюте.
  • 0
    Вы имеете в виду, что не используйте двоичные числа с плавающей запятой ... decimal по-прежнему является типом с плавающей запятой.
Показать ещё 4 комментария
1

Это простой способ:

System.Globalization.CultureInfo ci = 
   System.Globalization.CultureInfo.GetCultureInfo("hi-IN");
Console.WriteLine((123456789.87).ToString("N", ci));

Обратите внимание, что это выполняется с правильно настроенной структурой NumberFormatInfo в объекте поставщика/культуры формата. Вы также можете создавать свои собственные объекты культуры, если необходимо:

foreach (int gs in ci.NumberFormat.CurrencyGroupSizes)
{
   Console.WriteLine(gs);
}

Также обратите внимание, что если система настроена так, что hi-IN - это родная культура на машине, номера будут отформатированы таким образом по умолчанию без необходимости явно извлекать культуру и передавать ее аргументу поставщика формата.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню