【发布时间】:2016-05-23 09:58:42
【问题描述】:
我通常只会使用这个:
double test = 1234.5678;
Console.WriteLine(test.ToString("C"));
效果很好。我对加元进行了“覆盖”,以确保人们能够看到美元和加元之间的差异:
var canadaFi = (NumberFormatInfo)CultureInfo.GetCultureInfo("en-CA").NumberFormat.Clone();
canadaFi.CurrencySymbol = "C$ ";
Console.WriteLine(val.ToString("C", canadaFi));
但现在人们要求输出如下:
1234,56 加元
所以我用了:
RegionInfo ca = new RegionInfo("en-CA");
Console.WriteLine(string.Format("{0} {1}", ca.ISOCurrencySymbol, test.ToString("f2")));
这行得通,但我想知道这是否是最好的方法在浮点/双精度前面获取 3 char iso 货币符号。
所以我现在必须使用RegionInfo,而不是使用CultureInfo?
【问题讨论】:
-
似乎没有“简单”的方法来做到这一点。从stackoverflow.com/a/22837610/1336590 开始,您可能希望将
cultureInfo作为方法的输入参数。然后我有string currencyValue = value.ToString("C", cultureInfo);来获取“正确”的货币字符串。然后删除货币符号,修剪并添加regionInfo的ISOCurrencySymbol。 - - 顺便提一句。使用decimal而不是double来获取货币价值以避免头痛。 -
这确实解决了千位分隔符,感谢您的建议!
-
所以基本上:
public static string FormatCurrency(decimal value, CultureInfo cultureInfo) { return string.Concat(new RegionInfo(cultureInfo.LCID).ISOCurrencySymbol, " ", value.ToString("C", cultureInfo).Replace(cultureInfo.NumberFormat.CurrencySymbol, string.Empty).Trim()); }--- 并使用FormatCurrency(1234.5678m, CultureInfo.GetCultureInfo("en-CA"))和FormatCurrency(1234.5678m, CultureInfo.GetCultureInfo("de-DE"))进行测试 -
请作为答案发布,以便我给你积分并将其标记为已接受。
标签: c# currency cultureinfo regioninfo