将十进制数字从字符串转换为双精度
Convert decimal numbers from string to double
我已将包含十进制数字的文件读入一个字符串数组,例如: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();
很可能这是一种用于解析的文化 issue.Use InvariantCulture
。您的数字有 dot
(.) 有小数运算符,这与您当前区域性的小数点分隔符不同。
numbers_input = lines.Select(x => double.Parse(x, CultureInfo.InvariantCulture))
.ToArray();
您应该考虑区域设置。默认情况下,double.Parse 使用当前线程区域设置,该区域设置可能指定与文件中使用的小数点分隔符不同的小数点分隔符。例如。有些文化使用逗号 (,),而其他文化使用句点 (.)
如果您的数据文件没有问题并且使用句点作为小数点分隔符,那么您可以使用
lines.Select(x => double.Parse(x, CultureInfo.InvariantCulture)).ToArray();
我已将包含十进制数字的文件读入一个字符串数组,例如: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();
很可能这是一种用于解析的文化 issue.Use InvariantCulture
。您的数字有 dot
(.) 有小数运算符,这与您当前区域性的小数点分隔符不同。
numbers_input = lines.Select(x => double.Parse(x, CultureInfo.InvariantCulture))
.ToArray();
您应该考虑区域设置。默认情况下,double.Parse 使用当前线程区域设置,该区域设置可能指定与文件中使用的小数点分隔符不同的小数点分隔符。例如。有些文化使用逗号 (,),而其他文化使用句点 (.)
如果您的数据文件没有问题并且使用句点作为小数点分隔符,那么您可以使用
lines.Select(x => double.Parse(x, CultureInfo.InvariantCulture)).ToArray();