奇怪的字符串.格式行为
本文关键字:格式 字符串 | 更新日期: 2023-09-27 18:33:05
我有一个名为totalCost
的double
变量,它的值是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)
直接回答:没有奇怪的行为,代码完全按预期工作。