Convert.ToDecimal引发意外异常

本文关键字:意外 异常 ToDecimal Convert | 更新日期: 2023-09-27 18:21:54

这可能是一个旧的,但我在上面找不到任何东西。有人知道为什么吗:

Convert.ToDecimal("3.14521963414679E-08")

投掷

FormatException("输入字符串的格式不正确。")

然而,这如预期的那样有效?

Convert.ToDouble("3.14521963414679E-08")

我以为Convert.ToDecimal可以处理指数——也许我错了。

Convert.ToDecimal引发意外异常

Convert.ToDecimal不支持科学记数法。

有文件证明Convert.ToDecimal内部使用Decimal.Parse,而Decimal.Parse的文件说明这使用NumberStyles.Number,因此只有以下内容是有效的输入:

[ws][sign][digits,]digits[.fractional-digits][ws] 

为了支持科学记数法,您必须使用Decimal.Parse的另一个重载,它允许您指定要使用的NumberStyles

var result = decimal.Parse("3.14521963414679E-08",
                           NumberStyles.Number | NumberStyles.AllowExponent);

Convert.ToDecimal()方法显式使用Decimal.Parse()

来自MSDN

指示数字字符串可以采用指数表示法。这个AllowExponent标志允许解析的字符串包含指数以"E"或"E"字符开头,后跟可选的正号或负号以及一个整数。换句话说成功解析格式为nnnExx、nnnE+xx和nnnE-xx的字符串。它不允许在有效位或尾数;要允许解析字符串中的这些元素,请使用AllowDecimalPoint和AllowLeadingSign标志,或使用复合样式其中包括这些单独的标志。

您可以使用此方法的Decimal.Parse Method (String, NumberStyles)重载,这允许您使用类似的NumberStyles枚举;

Decimal.Parse("3.14521963414679E-08",
              NumberStyles.AllowExponent | NumberStyles.AllowDecimalPoint);

这里是演示

因此->

ToDecimal(String)--将指定的数字字符串表示形式转换为等效的十进制数

ToDouble(String)--将指定的数字字符串表示形式转换为等效的双精度浮点数

进一步澄清访问-http://msdn.microsoft.com/en-us/library/System.Convert_methods.aspx

希望能有所帮助…:)