有一个十进制变量'价格'和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);
答案 0 :(得分:1)
您应该使用区域性的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)
*/
答案 1 :(得分:1)
如果我理解正确,这不是你想要的吗?
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);