我读过一个包含数字的文件,包括十进制数字,例如:10.4到一个字符串数组。我想获得一系列双打。我的方法只适用于没有小数部分的数字,但对于十进制数字则会产生以下错误:
发生了'System.FormatException'类型的未处理异常 mscorlib.dll附加信息:输入字符串不在 格式正确。
您是否有一些想法如何修改代码以适用于所有正实数?
string[] lines = System.IO.File.ReadAllLines(fd.FileName);
numbers_input = lines.Select(x => double.Parse(x)).ToArray();
答案 0 :(得分:2)
您应该考虑区域设置。默认情况下,double.Parse使用当前线程区域设置,该区域设置可能指定与文件中使用的小数点分隔符不同的小数点分隔符。例如。一些文化使用逗号(,),而其他文化使用句点(。)
如果您的数据文件正常并且使用句点作为小数分隔符,则可以使用
lines.Select(x => double.Parse(x, CultureInfo.InvariantCulture)).ToArray();
答案 1 :(得分:1)
很可能这是一个文化问题。使用InvariantCulture
进行解析。您的数字dot
(。)有十进制运算符,不同于当前文化的小数分隔符。
numbers_input = lines.Select(x => double.Parse(x, CultureInfo.InvariantCulture))
.ToArray();