我继承了一些价格格式如下的代码:
(1.23d).ToString("£0.00");
我通常会格式化这样的货币:
(1.23d).ToString("C");
如果机器的区域设置设置为英国(它是),那么这两种方法之间有什么区别吗?我可以做一个大的发现并替换整个解决方案吗?
答案 0 :(得分:2)
根据标准Numeric Format Strings,“C”格式说明符的行为由当前文化NumberFormatInfo中的设置决定。您可以通过检查NumberFormatInfo
:
Thread.CurrentThread.CurrentCulture = new CultureInfo("en-GB");
var nfi = Thread.CurrentThread.CurrentCulture.NumberFormat;
Console.WriteLine(nfi.CurrencyDecimalDigits);
Console.WriteLine(nfi.CurrencyDecimalSeparator);
Console.WriteLine(nfi.CurrencyNegativePattern);
Console.WriteLine(nfi.CurrencyPositivePattern);
Console.WriteLine(nfi.CurrencySymbol);
答案 1 :(得分:1)
您可以通过在具有该区域设置的计算机上运行此代码(或首先使用Thread.CurrentThread.CurrentCulture = new CultureInfo("en-GB");
强制执行此代码)来部分验证:
var nf = CultureInfo.CurrentCulture.NumberFormat;
Console.WriteLine("CurrencyPositivePattern: " + nf.CurrencyPositivePattern);
Console.WriteLine("CurrencyNegativePattern: " + nf.CurrencyNegativePattern);
Console.WriteLine("NegativeSign: " + nf.NegativeSign);
Console.WriteLine("CurrencySymbol: " + nf.CurrencySymbol);
Console.WriteLine("CurrencyDecimalDigits: " + nf.CurrencyDecimalDigits);
Console.WriteLine("CurrencyDecimalSeparator: " + nf.CurrencyDecimalSeparator);
Console.WriteLine("CurrencyGroupSeparator: " + nf.CurrencyGroupSeparator);
Console.WriteLine("CurrencyGroupSizes: " + string.Join(",", nf.CurrencyGroupSizes.Select(gs => gs.ToString())));
请注意组大小属性。在我的机器上这段代码:
Console.WriteLine((1232323d).ToString("C"));
Console.WriteLine((1232323d).ToString("£0.00"));
由于数字组,产生两个不同的字符串。
另外,正如其他人所指出的那样,并且您可能已经知道 - 应该使用decimal
代替double
来代替货币。
答案 2 :(得分:0)
没有区别。如果在您的区域语言设置中选择了所需的货币。
是的,总是更喜欢decimal
作为资金的数据类型。
答案 3 :(得分:0)
(1.23d).ToString("£0.00");
可能会更清楚地表明数字总是代表£(业务逻辑),这不仅仅是一个任意的显示事物。