2015-04-02 43 views
0

我已经读取了一个包含十进制数字的文件包含数字,例如:10.4转换为字符串数组。我想获得一系列双打。我的方法对数字工作,而小数部分而已,但对于那些小数给出以下错误:将字符串中的十进制数字转换为双精度型

An unhandled exception of type 'System.FormatException' occurred in mscorlib.dll Additional information: Input string was not in a correct format.

你有一些想法如何修改代码以对所有正实数工作?

string[] lines = System.IO.File.ReadAllLines(fd.FileName); 
numbers_input = lines.Select(x => double.Parse(x)).ToArray(); 
+1

确保他们不是(y => y.Trim()。Length> 0).Select(x => double.Parse(x.Trim()))。ToArray() ; – TheRk 2015-04-02 17:28:20

回答

2

您应该考虑到区域设置。默认情况下,double.Parse与当前线程区域设置一起使用,该区域设置可能会指定与文件中使用的小数分隔符不同的小数分隔符。例如。一些文化中使用逗号(,),而其他人使用句号(。)

如果你的数据文件是好的,是用句点作为小数点分隔符,那么你可以使用

lines.Select(x => double.Parse(x, CultureInfo.InvariantCulture)).ToArray(); 
+0

非常感谢,它现在有效。 – kamila 2015-04-07 19:03:36

1

这很可能是一个文化问题。使用InvariantCulture进行解析。你的号码有dot(。)有十进制运算符,它与当前文化的小数分隔符不同。

numbers_input = lines.Select(x => double.Parse(x, CultureInfo.InvariantCulture)) 
        .ToArray(); 
+0

是的,非常感谢。 – kamila 2015-04-07 19:02:58

相关问题