В Индии и других азиатских странах деньги отформатированы следующим образом: Первые три цифры, сгруппированные в три, затем все остальные цифры сгруппированы в две пары. например: 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
Используйте соответствующий спецификатор CultureInfo и спецификатор формата "c":
CultureInfo hindi = CultureInfo.CreateSpecificCulture("hi-IN");
string text = string.Format(hindi, "{0:c}", 254255.12);
Обратите внимание, что для значений валюты необходимо использовать decimal
, а не double
, чтобы избежать проблем с двойной точкой с плавающей запятой.
Это простой способ:
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 - это родная культура на машине, номера будут отформатированы таким образом по умолчанию без необходимости явно извлекать культуру и передавать ее аргументу поставщика формата.
decimal
по-прежнему является типом с плавающей запятой.