【问题标题】:Strange string.Format behavior奇怪的 string.Format 行为
【发布时间】:2013-09-27 18:53:07
【问题描述】:

我有一个名为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”),然后在不使用我的分隔符设置的情况下重新解析它(将其解释为 1 和 25 千),最后格式化转换后的值。

编辑:线程文化是:

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

【问题讨论】:

  • 我已经编辑了我的问题,因为我输入了错误的分隔符
  • 您确定该值为1025?这两种情况都适合 1.025 的值和小数点分隔符是逗号
  • 你能检查一下你的 CultureInfo.CurrentCulture 是什么吗?如果您发布它,我们可以重新创建您的场景。
  • 对我来说,它输出 1025,0 和文化 it-IT
  • string.Format("{0:0.0}",1025.0) => "1025,0"

标签: c# string.format


【解决方案1】:

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

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

【讨论】:

  • 我同意缪斯凡的观点。这是一个验证他的答案的演示 (ideone.com/cO2CaD)。
  • 真丢脸……我通常使用不同的分隔符,所以我虽然 1,025 是 1025..它实际上是 1.025
猜你喜欢
  • 2018-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-08
  • 2015-07-20
  • 2010-10-03
  • 2021-07-12
相关资源
最近更新 更多