Man*_*cho 5 c# double type-conversion
我正在从XML文件中读取一些x和y坐标.
坐标这个样子3.47,-1.54..等等.
当我将值赋值给double变量时
double x, y;
x = Convert.ToDouble(reader["X"]); // X Value: 3.47
Run Code Online (Sandbox Code Playgroud)
价值变成了 3470.00
为什么会这样?
Son*_*nül 11
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
Run Code Online (Sandbox Code Playgroud)
对于您的-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
Run Code Online (Sandbox Code Playgroud)
正如其他人已经提到的,问题在于文化背景。XML 应该与不变的文化一起工作,这就是为什么你不应该使用Convert类(尽管你可以,传递CultureInfo.InvariantCulture每个调用,这很容易被忘记),而是为此目的专门提供的XmlConvert 类,它涵盖了所需的写入和读取转换用于 XML 内容。
所以在你的情况下你应该真正使用
x = XmlConvert.ToDouble(reader["X"]);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
254 次 |
| 最近记录: |