2

为什么这个指数FormatException在使用Decimal.Parse.

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

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

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

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

4

2 回答 2

2

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

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

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

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

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

于 2013-09-18T20:23:52.450 回答
1

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

于 2013-09-18T20:27:28.040 回答