A CultureInfo
содержит NumberFormatInfo
, и этот класс описывает (среди прочего), как форматировать валюту для этой конкретной культуры.
В частности, вы можете использовать CurrencyPositivePattern
и CurrencyNegativePattern
для определенияесли символ валюты размещен до или после суммы и, конечно, CurrencySymbol
, чтобы получить правильный символ валюты.Вся эта информация используется .NET, когда используется спецификатор формата C
.
Подробнее о классе NumberFormatInfo можно прочитать в MSDN.
Код нижедемонстрирует некоторые шаги, необходимые для правильного форматирования валюты.Он использует только CurrencySymbol
, CurrencyPositivePattern
и CurrencyDecimalDigits
и поэтому является неполным:
var amount = 123.45M;
var cultureInfo = CultureInfo.GetCultureInfo("da-DK");
var numberFormat = cultureInfo.NumberFormat;
String formattedAmount = null;
if (amount >= Decimal.Zero) {
String pattern = null;
switch (numberFormat.CurrencyPositivePattern) {
case 0:
pattern = "{0}{1:N" + numberFormat.CurrencyDecimalDigits + "}";
break;
case 1:
pattern = "{1:N" + numberFormat.CurrencyDecimalDigits + "}{0}";
break;
case 2:
pattern = "{0} {1:N" + numberFormat.CurrencyDecimalDigits + "}";
break;
case 3:
pattern = "{1:N" + numberFormat.CurrencyDecimalDigits + "} {0}";
break;
}
formattedAmount = String.Format(cultureInfo, pattern, numberFormat.CurrencySymbol, amount);
}
else {
// ...
}
Console.WriteLine(formattedAmount);
Конечно, вы можете просто использовать:
var amount = 123.45M;
var cultureInfo = CultureInfo.GetCultureInfo("da-DK");
var formattedAmount = String.Format(cultureInfo, "{0:C}", amount);
Console.WriteLine(formattedAmount);