0

我有一个double名为的变量totalCost,它的值是1025. 调用一个简单的结果string.Format如下:

?string.Format("{0}",totalCost)
"1,025"

我的千位分隔符是点,而小数点分隔符是逗号。

奇怪的部分如下:

?string.Format("{0:0.0}",totalCost)
"1,0"

不应该是1025.0(或1,025.0)吗?

它似乎将双精度转换为字符串(给出“1.025”),然后在不使用我的分隔符设置的情况下重新解析它(将其解释为千分之二五),最后格式化转换后的值。

编辑:线程文化是:

?System.Threading.Thread.CurrentThread.CurrentCulture
{it-IT}
4

1 回答 1

4

你的场景不是你想象的那样。我 100% 确定您的实际值totalCost实际上是1.025(千分之一和二十五分之一),因为这是唯一可以产生与您给出的相同结果的值。

这可以通过以下代码看到:

double d = 1.025; 
Console.WriteLine(string.Format(new System.Globalization.CultureInfo("it-IT"), "{0}",d));
//1,025
Console.WriteLine(string.Format(new System.Globalization.CultureInfo("it-IT"), "{0:0.0}",d));
//1,0

如您所见,两个输出都与您的匹配。我建议您使用调试器来单步执行代码并查看值在哪一点被更改。(也许你正在沿线某处除以 1000)

直接回答:没有奇怪的行为,代码完全按预期工作。

于 2013-09-27T10:45:36.537 回答