2012-05-10 47 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)); 
相關問題