C# 为什么转换此指数会引发FormatException?

C# 为什么转换此指数会引发FormatException?,c#,parsing,decimal,implicit-conversion,C#,Parsing,Decimal,Implicit Conversion,当使用decimal.Parse转换为十进制时,为什么此指数会抛出FormatException String stringValue = "8.83080183680678E-05"; Decimal decimalValue = Decimal.Parse(badValue, NumberStyles.AllowExponent); 当代码执行时,它抛出一个FormatException “输入字符串的格式不正确。” 代码似乎遵循以下规则:[ws][$][sign][digits,]dig

当使用
decimal.Parse
转换为十进制时,为什么此指数会抛出
FormatException

String stringValue = "8.83080183680678E-05";
Decimal decimalValue = Decimal.Parse(badValue, NumberStyles.AllowExponent);
当代码执行时,它抛出一个
FormatException

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


代码似乎遵循以下规则:
[ws][$][sign][digits,]digits[.小数][e[sign]digits][ws]

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

Decimal.Parse(badValue, NumberStyles.AllowExponent | NumberStyles.AllowDecimalPoint);
…AllowExponent的文档中对此进行了解释:

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

numberstyle.Float在这种情况下可能是更好的选择。

不包括
AllowDecimalPoint
。您可能想使用
numberstyle.Float
,其中包括“AllowReadingWhite、AllowTrailingWhite、AllowReadingSign、AllowDecimalPoint和AllowExponent”