为什么当使用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]
答案 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”。