为什么Convert.ToDouble将我的价值改变1000倍?

时间:2015-12-17 11:06:48

标签: c# double type-conversion

我正在从XML文件中读取一些x和y坐标。

坐标看起来像3.47-1.54,..等等。

当我通过

将值赋值给double变量时
double x, y;
x = Convert.ToDouble(reader["X"]); // X Value: 3.47

值变为3470.00

为什么会这样?

2 个答案:

答案 0 :(得分:11)

如果您不提供任何 10

Convert.ToDouble方法会默认使用您的CurrentCulture设置

您的IFormatProvider似乎未将CurrentCulture用作NumberDecimalSeparator,但它可能用作NumberGroupSeparator。这就是为什么你的字符串解析为.而不是3400

作为一种解决方案,您可以在3.4方法的第二个参数中使用已经具有.作为NumberDecimalSeparator的文化,例如{{3 }}

Convert.ToDouble

对于您的double x; x = Convert.ToDouble("3.47", CultureInfo.InvariantCulture); // x will be 3.47 not 3470 示例,您需要指定使用合并的-1.54AllowLeadingSign样式。 很遗憾AllowDecimalPoint没有任何重载,它将Convert.ToDouble作为参数。

为此,您可以使用NumberStyles方法。

double.Parse

答案 1 :(得分:3)

正如其他人已经提到的,问题在于文化背景。 XML应该与不变的文化一起工作,这就是为什么你不应该使用Convert类(尽管你可以,在每次调用中传递CultureInfo.InvariantCulture,这很容易被遗忘),但是为此专门提供了XmlConvert Class,涵盖了XML内容所需的书写和阅读转换。

所以在你的情况下你应该真的使用

x = XmlConvert.ToDouble(reader["X"]);