我的代码中有如下一行:
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}
来源:
即使没有指定 InvariantCulture,您也会得到逗号
Console.WriteLine(string.Format("{0:n4}", 1008.0));