大家好我正在开发一个使用数字精度的软件,但是我遇到了这个问题,当我拿一个字符串转换为double时,它会输出我不同的文化。
例如我使用
Convert.ToDouble("4089.90"); // it outputs 40.899,00
奇怪的原因在我的电脑中它运作正常但在客户端的PC上(在区域设置中具有相同的文化)向我显示后一输出。我知道我可以使用
修复它Convert.ToDouble("4089.90", System.Globalization.CultureInfo.InvariantCulture);
但程序中有很多代码使用“Convert.ToDouble”,我不想改变所有代码,另一方面我想了解为什么会发生这种情况。
提前致谢。
答案 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
。遗憾。