我正在从XML文件中读取一些x和y坐标.
坐标这个样子3.47
,-1.54
..等等.
当我将值赋值给double变量时
double x, y; x = Convert.ToDouble(reader["X"]); // X Value: 3.47
价值变成了 3470.00
为什么会这样?
Convert.ToDouble
如果您不提供任何方法,默认情况下使用您的CurrentCulture
设置. IFormatProvider
看起来你CurrentCulture
不会.
用作a,NumberDecimalSeparator
但它可能用作a NumberGroupSeparator
.这就是为什么你的字符串解析为3400
没有3.4
作为一个解决方案,你可以使用一个文化已经有.
一个NumberDecimalSeparator
在你的第二个参数Convert.ToDouble
的方法类似InvariantCulture
.
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
方法.
double x; x = double.Parse("-1.54", NumberStyles.AllowLeadingSign | NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture); // x will be -1.54