C# 为什么Convert.ToDouble会将我的值更改因子1000?
我正在从XML文件中读取一些x和y坐标 坐标如下所示C# 为什么Convert.ToDouble会将我的值更改因子1000?,c#,double,type-conversion,C#,Double,Type Conversion,我正在从XML文件中读取一些x和y坐标 坐标如下所示3.47,-1.54。。等等 当我通过 double x, y; x = Convert.ToDouble(reader["X"]); // X Value: 3.47 该值变为3470.00 为什么会出现这种情况?Convert.ToDouble方法在默认情况下使用您的设置,如果您不提供任何IFormatProvider 看起来您的CurrentCulture没有将用作,但它可能将用作。这就是为什么字符串被解析为3400而不是3.4 作为一
3.47
,-1.54
。。等等
当我通过
double x, y;
x = Convert.ToDouble(reader["X"]); // X Value: 3.47
该值变为3470.00
为什么会出现这种情况?
Convert.ToDouble
方法在默认情况下使用您的设置,如果您不提供任何IFormatProvider
看起来您的CurrentCulture
没有将
用作,但它可能将用作。这就是为什么字符串被解析为3400
而不是3.4
作为一种解决方案,您可以在Convert.ToDouble
方法的第二个参数中使用已具有
的区域性作为numberdCimalSeparator
对于-1.54
示例,需要指定使用组合的allowReadingSign
和AllowDecimalPoint
样式。不幸的是,Convert.ToDouble
没有任何将numberstyle
作为参数的重载
为此,可以改用double.Parse
方法
double x;
x = double.Parse("-1.54", NumberStyles.AllowLeadingSign | NumberStyles.AllowDecimalPoint,
CultureInfo.InvariantCulture); // x will be -1.54
正如其他人已经提到的,问题在于文化设置。XML应该与不变的区域性一起工作,这就是为什么您不应该使用
Convert
类(尽管您可以在每次调用中传递CultureInfo.InvariantCulture
,这很容易被忘记),而是为此目的专门提供的一个类,它涵盖了XML内容所需的写入和读取转换
所以在你的情况下,你真的应该使用
x = XmlConvert.ToDouble(reader["X"]);
错误的文化设置?尝试
Convert.ToDouble(读卡器[“x”],CultureInfo.InvariantCulture)
x = XmlConvert.ToDouble(reader["X"]);