Convert.ToDouble(“4089.90”)输出40.899,00为什么?

时间:2010-01-12 20:59:07

标签: c# asp.net

大家好我正在开发一个使用数字精度的软件,但是我遇到了这个问题,当我拿一个字符串转换为double时,它会输出我不同的文化。

例如我使用

Convert.ToDouble("4089.90"); // it outputs 40.899,00

奇怪的原因在我的电脑中它运作正常但在客户端的PC上(在区域设置中具有相同的文化)向我显示后一输出。我知道我可以使用

修复它
Convert.ToDouble("4089.90", System.Globalization.CultureInfo.InvariantCulture);

但程序中有很多代码使用“Convert.ToDouble”,我不想改变所有代码,另一方面我想了解为什么会发生这种情况。

提前致谢。

5 个答案:

答案 0 :(得分:14)

您可以使用以下方式设置线程的文化:

Thread.CurrentThread.CurrentCulture = 
       System.Globalization.CultureInfo.InvariantCulture;

答案 1 :(得分:2)

你没有说你所在的位置,但输出与当前文化是一致的“。”作为千位分隔符和十进制逗号而不是小数点。

但是,你说文化是一样的 - 这与此相矛盾。您或客户是否更改(或自定义)区域和语言选项中的“标准和格式”?如果设置已经自定义,它仍将显示为“英语(英国)”(或任何地方),但会产生不同的默认结果。

答案 2 :(得分:1)

我既不知道c#也不知道asp.net,但我认为问题是这样的:你在一个文化中执行操作,其中点.是千位分隔符,而不是小数点分隔符。您引用的输出结果是证明:40.899,00

你在做什么文化/地区?

答案 3 :(得分:0)

文化可以基于运行ASP.Net应用程序的位置,而不是运行浏览器的客户端PC。虽然他们的台式PC可能具有类似的文化设置,但服务器可能会有所不同。

答案 4 :(得分:0)

您的计算机没有给出正确的答案,而不是他们的答案。您的文化表明“4089.90”与4089900相同,因为点(。)用于分隔数千(因此点后面应该有三个数字)。

看起来您想要将点用作小数分隔符,与文化设置相反;所以你 在你的程序中使用System.Globalization.CultureInfo.InvariantCulture。遗憾。