为什么转换这个指数会抛出一个格式异常

本文关键字:一个 格式 异常 转换 指数 为什么 | 更新日期: 2023-09-27 18:31:47

为什么这个指数在使用Decimal.Parse转换为小数时会抛出FormatException

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

当代码执行时,它会抛出一个FormatException

"输入字符串格式不正确。"

该代码似乎符合 MSDN 规范:[ws][$][sign][digits,]digits[.fractional-digits][e[sign]digits][ws]

为什么转换这个指数会抛出一个格式异常

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

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

。这在 AllowExponent 的文档中进行了解释:

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

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

NumberStyles.AllowExponent不包括

AllowDecimalPoint。您可能想使用 NumberStyles.Float ,其中包括"AllowLeadingWhite、AllowTrailingWhite、AllowLeadingSign、AllowDecimalPoint 和 AllowExponent"。