Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Convert.ToDecimal引发意外异常_C#_.net_Types_Scientific Notation - Fatal编程技术网

C# Convert.ToDecimal引发意外异常

C# Convert.ToDecimal引发意外异常,c#,.net,types,scientific-notation,C#,.net,Types,Scientific Notation,这可能是一个旧的,但我在上面找不到任何东西。有人知道为什么会这样: Convert.ToDecimal("3.14521963414679E-08") 投掷 FormatException(“输入字符串的格式不正确。”) 然而,这是否如预期的那样有效 Convert.ToDouble("3.14521963414679E-08") 我以为Convert.ToDecimal可以处理指数-也许我弄错了。Convert.ToDecimal不支持科学符号 有文件证明,Convert.ToDecima

这可能是一个旧的,但我在上面找不到任何东西。有人知道为什么会这样:

Convert.ToDecimal("3.14521963414679E-08")
投掷

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

然而,这是否如预期的那样有效

Convert.ToDouble("3.14521963414679E-08")

我以为Convert.ToDecimal可以处理指数-也许我弄错了。

Convert.ToDecimal
不支持科学符号

有文件证明,
Convert.ToDecimal
在内部使用
Decimal.Parse
,并且声明它使用
numberstyle.Number
,因此只有以下内容是有效输入:

[ws][sign][digits,]digits[.fractional-digits][ws] 
要支持科学记数法,您必须使用另一个超负荷的
Decimal.Parse
,它允许您指定要使用的
numberstyle

var result = decimal.Parse("3.14521963414679E-08",
                           NumberStyles.Number | NumberStyles.AllowExponent);
Convert.ToDecimal()
方法显式使用
Decimal.Parse()

来自

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

您可以使用此方法的重载,它允许您使用枚举,如

Decimal.Parse("3.14521963414679E-08",
              NumberStyles.AllowExponent | NumberStyles.AllowDecimalPoint);
这里有一个。

因为这个->

ToDecimal(字符串)--将数字的指定字符串表示形式转换为等效的十进制数。

ToDouble(String)——将数字的指定字符串表示形式转换为等效的双精度浮点数。

如需进一步澄清,请访问-


希望有帮助:)

哪种异常?可能是因为
E-
部分?一个格式异常:“输入字符串的格式不正确。”我想Convert.ToDecimal可以处理指数?不要在注释中添加其他信息,编辑问题。可以,但不能。这些是在执行
Convert.To…
.Erh.时调用的方法。我不明白为什么没有选择此答案。这实际上更有效地回答了问题,因此我已将此转换为可接受的答案。谢谢-这是一个非常有用的补充