将String解析为double时发生System.FormatException

时间:2019-01-29 11:38:12

标签: c# string parsing double exponent

该代码在Unity中运行良好。现在,我在控制台项目中使用相同的代码,并收到 System.FormatException 异常。

代码是:

private double ConvertToNumber(string number)
        {      
            return double.Parse(number, numberStyle);
        }

调用时的参数是:

number = "3.138924e-002"
numberStyle = NumberStyles.AllowExponent | NumberStyles.AllowDecimalPoint | NumberStyles.AllowLeadingSign

有人看到错误,还是知道可能是什么原因造成的?

2 个答案:

答案 0 :(得分:1)

抛出异常是因为您提供的字符串无法使用您指定的格式和您当前的字体转换为数字。除非您指定,否则后者是隐含的。

如果您正在从数据库中读取此值,则应使用不变的区域性(即,用于在用户需要的任何位置(用户界面除外)以一致的方式持久存储数字和日期的区域性)。

您的代码变为:

return double.Parse(number, numberStyle, System.Globalization.CultureInfo.InvariantCulture);

相反,如果您需要一种特定的文化,则需要传递正确的文化来代替不变的文化。

答案 1 :(得分:0)

@ Selvin CultureInfo.InvariantCulture 将其添加为参数来纠正错误是正确的。

return double.Parse(number, numberStyle, CultureInfo.InvariantCulture);