-1

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

Convert.ToDecimal("3.14521963414679E-08")

投掷

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

但是,这按预期工作吗?

Convert.ToDouble("3.14521963414679E-08")

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

4

3 回答 3

8

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

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

[ws][sign][digits,]digits[.fractional-digits][ws] 

为了支持科学记数法,您将不得不使用另一个重载Decimal.Parse允许您指定NumberStyles要使用的:

var result = decimal.Parse("3.14521963414679E-08",
                           NumberStyles.Number | NumberStyles.AllowExponent);
于 2013-07-11T11:25:18.177 回答
1

Convert.ToDecimal()方法Decimal.Parse()显式使用。

来自MSDN

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

您可以使用Decimal.Parse Method (String, NumberStyles)此方法的重载,它允许您使用NumberStyles枚举,例如;

Decimal.Parse("3.14521963414679E-08",
              NumberStyles.AllowExponent | NumberStyles.AllowDecimalPoint);

这里有一个DEMO

于 2013-07-11T11:29:12.793 回答
0

因为这个->

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

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

如需进一步说明,请访问 - http://msdn.microsoft.com/en-us/library/System.Convert_methods.aspx

希望能帮助到你..:)

于 2013-07-11T11:31:04.917 回答