为什么转换此指数会抛出FormatException?

时间:2013-09-18 20:20:49

标签: c# parsing decimal implicit-conversion

为什么当使用FormatException转换为小数时,此指数会抛出Decimal.Parse

String stringValue = "8.83080183680678E-05";
Decimal decimalValue = Decimal.Parse(badValue, NumberStyles.AllowExponent);

代码执行时抛出FormatException

  

“输入字符串的格式不正确。”

代码似乎符合MSDN spec[ws][$][sign][digits,]digits[.fractional-digits][e[sign]digits][ws]

2 个答案:

答案 0 :(得分:2)

您需要指定数字格式也允许小数。

Decimal.Parse(badValue, NumberStyles.AllowExponent | NumberStyles.AllowDecimalPoint);

...在AllowExponent的文档中对此进行了解释:

  

表示数字字符串可以是指数表示法。 AllowExponent标志允许解析的字符串包含以“E”或“e”字符开头的指数,后跟可选的正号或负号以及整数。换句话说,它成功地以nnnExx,nnnE + xx和nnnE-xx的形式解析字符串。 它不允许使用小数分隔符或在有效数字或尾数中签名;要允许解析字符串中的这些元素,请使用AllowDecimalPoint和AllowLeadingSign标志,或使用包含这些单独标志的复合样式。

在这种情况下,

NumberStyles.Float可能是更好的选择。

答案 1 :(得分:1)

NumberStyles.AllowExponent不包含AllowDecimalPoint。您可能希望使用NumberStyles.Float,其中包括“AllowLeadingWhite,AllowTrailingWhite,AllowLeadingSign,AllowDecimalPoint和AllowExponent”。