Отформатируйте десятичное число, чтобы скорректировать валюту, используя правильное количество десятичных знаков (C#)
Имея десятичную переменную 'price' и переменную RegionInfo 'region', например так:
var price = new Decimal(49.9);
var region = new RegionInfo(Thread.CurrentThread.CurrentUICulture.LCID);
Я делаю так:
string.Format("{0:0,0.##} {1}", price, region.CurrencySymbol);
Это вернет желаемую ценовую строку для двух из трех культур, которые я хочу поддержать (шведский и норвежский). Хотя для третьей культуры (датской) он ошибочно поместит символ валюты после суммы.
Это альтернативный подход:
string.Format("{0:c}", price);
Это работает для всех трех культур, но теперь моя проблема в том, что я не могу контролировать количество десятичных значений.
Мой вопрос: как мне одновременно контролировать количество десятичных значений и валютную культуру?
Я ищу что-то вроде этого (что, конечно, не работает):
string.Format("{0:c,0.##}", price);
2 ответа
Если я вас правильно понял, разве это не то, что вы хотите?
var price = new Decimal(49.9);
var cultureInfo = new CultureInfo("da-DK");
//var currentCultureInfo = new CultureInfo(CultureInfo.CurrentCulture.Name);
var test = string.Format(cultureInfo, "{0:C2}", price);
Вы должны использовать свойство NumberFormat культуры, так как оно уже содержит информацию о том, сколько десятичных знаков должно быть включено, но вы можете переопределить его, если установите его свойство CurrencyDecimalDigits.
Пример из MSDN:
class NumberFormatInfoSample {
public static void Main() {
// Gets a NumberFormatInfo associated with the en-US culture.
NumberFormatInfo nfi = new CultureInfo( "en-US", false ).NumberFormat;
// Displays a negative value with the default number of decimal digits (2).
Int64 myInt = -1234;
Console.WriteLine( myInt.ToString( "C", nfi ) );
// Displays the same value with four decimal digits.
nfi.CurrencyDecimalDigits = 4;
Console.WriteLine( myInt.ToString( "C", nfi ) );
}
}
/*
This code produces the following output.
($1,234.00)
($1,234.0000)
*/