这两个格式字符串的结果有什么区别吗?

时间:2014-02-17 14:36:39

标签: c# string-formatting

我继承了一些价格格式如下的代码:

(1.23d).ToString("£0.00");

我通常会格式化这样的货币:

(1.23d).ToString("C");

如果机器的区域设置设置为英国(它是),那么这两种方法之间有什么区别吗?我可以做一个大的发现并替换整个解决方案吗?

4 个答案:

答案 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");可能会更清楚地表明数字总是代表£(业务逻辑),这不仅仅是一个任意的显示事物。