为什么是字符串.格式产生这样的结果

本文关键字:结果 字符串 格式 为什么 | 更新日期: 2023-09-27 18:33:58

我的代码中有一行如下:

string buffer = string.Format(CultureInfo.InvariantCulture, "{0:N4}", 1008.0);

为什么buffer在执行此行后包含1,008.0(注意逗号)?

是的,我确实猜这是由我的区域设置引起的。问题是为什么在这种情况下它们会影响结果?

编辑:

好吧,我知道这完全是我的错。似乎我应该使用 F 格式说明符。

为什么是字符串.格式产生这样的结果

InvariantCulture松散地基于 en-US 使用 , 作为千(组)分隔符。

你的结果是我所期望的。

我还指出N数字格式说明符的详细信息:

数字 ("N") 格式说明符将数字转换为格式为"-d,ddd,ddd.ddd..."的字符串,其中"-"表示负数符号(如果需要),"d"表示数字 (0-9),","表示组分隔符,"." 表示小数点符号。

您使用的是固定区域性;您的区域性与此无关。为此,N4 格式意味着

-d,ddd,ddd,ddd...

也就是说,数千组之间可能存在的前导负号指示器和逗号。有关详细信息,请参阅:http://msdn.microsoft.com/en-us/library/dwhawy9k#NFormatString

你可以看看

NegativeSign
NumberNegativePattern
NumberGroupSizes
NumberGroupSeparator
NumberDecimalSeparator
NumberDecimalDigits

对于固定区域性。如果这样做,您将看到:

-
1
{ 3 }
,
.
2

由于"{0:N4}"而获得逗号

n

----- 带逗号的数字表示千----- {0:n}
源:

即使不指定不变文化,您也会得到逗号

Console.WriteLine(string.Format("{0:n4}", 1008.0));