我正在从XML文件读取一些x和y坐标。为什么Convert.ToDouble将1000的值更改为我的值?
坐标看起来像这样3.47
,-1.54
,..等等。
当我通过
double x, y;
x = Convert.ToDouble(reader["X"]); // X Value: 3.47
值分配给双变量的值变成3470.00
为什么会出现这种情况?
我正在从XML文件读取一些x和y坐标。为什么Convert.ToDouble将1000的值更改为我的值?
坐标看起来像这样3.47
,-1.54
,..等等。
当我通过
double x, y;
x = Convert.ToDouble(reader["X"]); // X Value: 3.47
值分配给双变量的值变成3470.00
为什么会出现这种情况?
正如其他人已经提到,问题是文化背景。 XML应该与不变的文化一起工作,这就是为什么你不应该使用Convert
类(尽管你可以在每次调用中传递CultureInfo.InvariantCulture
,这很容易被忘记),但是专门为此提供了XmlConvert Class,它涵盖了写入和读取转换XML内容需要。
所以你的情况应该要使用
x = XmlConvert.ToDouble(reader["X"]);
最佳答案,谢谢! – ManuKaracho
Convert.ToDouble
方法使用您的CurrentCulture
设置默认如果你不提供任何IFormatProvider
。
看起来像你的CurrentCulture
不使用.
作为NumberDecimalSeparator
,但它可能用作NumberGroupSeparator
。这就是为什么你的字符串被解析为3400
不3.4
作为一个解决方案,你可以使用已经有.
在你Convert.ToDouble
方法像InvariantCulture
的第二个参数NumberDecimalSeparator
的文化。
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
错误的文化设置?尝试'Convert.ToDouble(reader [“x”],CultureInfo.InvariantCulture)' –