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”