为什么string.Format产生这样的结果?

时间:2012-05-10 17:24:48

标签: c# string

我的代码中有如下所示的行:

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

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

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

编辑:

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

3 个答案:

答案 0 :(得分:5)

InvariantCulture基于en-US,它使用,作为千位(组)分隔符。

你的结果是我所期待的。

我还要指出N numeric format specifier的详细信息:

  

数字(" N")格式说明符将数字转换为格式为#34; -d,ddd,ddd.ddd ..."的字符串,其中" - "如果需要,表示负数符号," d"表示数字(0-9),","表示一个组分隔符,"。"表示小数点符号。

答案 1 :(得分:2)

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

-d,ddd,ddd,ddd...

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

你可以看看

NegativeSign
NumberNegativePattern
NumberGroupSizes
NumberGroupSeparator
NumberDecimalSeparator
NumberDecimalDigits

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

-
1
{ 3 }
,
.
2

答案 2 :(得分:1)

由于“{0:N4}”

,您收到逗号
  

n -----数字逗号数字----- {0:n}   
Source:

即使没有指定InvariantCulture

,您也会收到逗号
Console.WriteLine(string.Format("{0:n4}", 1008.0));