2012-05-10 49 views
1

我喜欢在我的代码如下一行:执行该行后为什么string.Format产生这样的结果?

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

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

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

编辑:

好的,我明白这完全是我的错。这似乎应该使用F format specifier

+0

您的区域设置是什么......? – gdoron

+0

@gdoron俄罗斯(俄罗斯) – Bobrovsky

+1

@gdoron ok,是不是CultureInfo.InvariantCulture应该重写这个? – Bobrovsky

回答

5

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

你的结果是我所期望的。

我也点你到N numeric format specifier的细节:

数字(“N”)格式说明符将数字转换为以下形式的字符串“-d,国内长途,ddd.ddd ......” ,其中“ - ”表示一个负号,如果需要的话,“d”表示一个数字(0-9),“”表示一个组分隔符和“。”表示小数点符号。

2

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

-d,ddd,ddd,ddd... 

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

你可以看一下

NegativeSign 
NumberNegativePattern 
NumberGroupSizes 
NumberGroupSeparator 
NumberDecimalSeparator 
NumberDecimalDigits 

固定区域性。如果你这样做,你会看到:

- 
1 
{ 3 } 
, 
. 
2 
1

你得到,因为逗号 “{0:N4}”

ň-----用逗号千数--- - {0:N}
Source:

你会得到逗号,即使没有指定InvariantCulture的

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