奇怪的字符串.格式行为

本文关键字:格式 字符串 | 更新日期: 2023-09-27 18:33:05

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

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

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

奇怪的部分如下:

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

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

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

编辑:线程区域性是:

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

奇怪的字符串.格式行为

你的场景不是你想象的那样。我 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)

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