我正在从XML文件中读取一些x和y坐标。
坐标看起来像3.47
,-1.54
,..等等。
当我通过
将值赋值给double变量时double x, y;
x = Convert.ToDouble(reader["X"]); // X Value: 3.47
值变为3470.00
为什么会这样?
答案 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.54
和AllowLeadingSign
样式。 很遗憾,AllowDecimalPoint
没有任何重载,它将Convert.ToDouble
作为参数。
为此,您可以使用NumberStyles
方法。
double.Parse
答案 1 :(得分:3)
正如其他人已经提到的,问题在于文化背景。 XML应该与不变的文化一起工作,这就是为什么你不应该使用Convert
类(尽管你可以,在每次调用中传递CultureInfo.InvariantCulture
,这很容易被遗忘),但是为此专门提供了XmlConvert Class,涵盖了XML内容所需的书写和阅读转换。
所以在你的情况下你应该真的使用
x = XmlConvert.ToDouble(reader["X"]);