Convert.ToDecimal抛出的意外异常

Joh*_*lly -1 .net c# types scientific-notation

这可能是旧的,但我找不到任何东西.有谁知道为什么这个:

Convert.ToDecimal("3.14521963414679E-08")
Run Code Online (Sandbox Code Playgroud)

FormatException("输入字符串的格式不正确.")

但是这可以按预期工作吗?

Convert.ToDouble("3.14521963414679E-08")
Run Code Online (Sandbox Code Playgroud)

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

Dan*_*rth 8

Convert.ToDecimal 不支持科学记数法.

据记载,Convert.ToDecimal内部使用Decimal.Parse和使用的状态的文档Decimal.ParseNumberStyles.Number,因此只有以下是有效的输入:

[ws][sign][digits,]digits[.fractional-digits][ws] 
Run Code Online (Sandbox Code Playgroud)

要支持科学记数法,您必须使用另一个重载Decimal.Parse,允许您指定NumberStyles要使用的:

var result = decimal.Parse("3.14521963414679E-08",
                           NumberStyles.Number | NumberStyles.AllowExponent);
Run Code Online (Sandbox Code Playgroud)

  • 呃..我不明白为什么没有选择这个答案. (2认同)