2

我的代码中有如下一行:

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

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

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

编辑:

好吧,我明白这完全是我的错。看来我应该使用F 格式说明符

4

3 回答 3

4

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

你的结果是我所期望的。

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

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

于 2012-05-10T17:30:17.917 回答
2

您正在使用不变的文化;你的文化与此无关。为此,N4 格式意味着

-d,ddd,ddd,ddd...

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

你可以看看

NegativeSign
NumberNegativePattern
NumberGroupSizes
NumberGroupSeparator
NumberDecimalSeparator
NumberDecimalDigits

对于不变的文化。如果你这样做,你会看到:

-
1
{ 3 }
,
.
2
于 2012-05-10T17:32:07.480 回答
1

由于“{0:N4}”,您得到逗号

n ----- 用逗号表示千位的数字 ----- {0:n}
来源:

即使没有指定 InvariantCulture,您也会得到逗号

Console.WriteLine(string.Format("{0:n4}", 1008.0));
于 2012-05-10T17:32:45.857 回答