我喜欢在我的代码如下一行:执行该行后为什么string.Format产生这样的结果?
string buffer = string.Format(CultureInfo.InvariantCulture, "{0:N4}", 1008.0);
为什么buffer
包含1,008.0
(注意逗号)?
是的,我猜这是由我的区域设置引起的。问题是为什么他们在这种情况下影响结果?
编辑:
好的,我明白这完全是我的错。这似乎应该使用F format specifier。
我喜欢在我的代码如下一行:执行该行后为什么string.Format产生这样的结果?
string buffer = string.Format(CultureInfo.InvariantCulture, "{0:N4}", 1008.0);
为什么buffer
包含1,008.0
(注意逗号)?
是的,我猜这是由我的区域设置引起的。问题是为什么他们在这种情况下影响结果?
编辑:
好的,我明白这完全是我的错。这似乎应该使用F format specifier。
InvariantCulture
松散地基于en-US
,其使用,
作为数千(组)分隔符。
你的结果是我所期望的。
我也点你到N
numeric format specifier的细节:
数字(“N”)格式说明符将数字转换为以下形式的字符串“-d,国内长途,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}”
ň-----用逗号千数--- - {0:N}
Source:
你会得到逗号,即使没有指定InvariantCulture的
Console.WriteLine(string.Format("{0:n4}", 1008.0));
您的区域设置是什么......? – gdoron
@gdoron俄罗斯(俄罗斯) – Bobrovsky
@gdoron ok,是不是CultureInfo.InvariantCulture应该重写这个? – Bobrovsky