这可能是一个旧的,但我找不到任何东西。有谁知道为什么会这样:
Convert.ToDecimal("3.14521963414679E-08")
投掷
FormatException ("输入字符串的格式不正确。")
但是,这按预期工作吗?
Convert.ToDouble("3.14521963414679E-08")
我认为 Convert.ToDecimal 可以处理指数 - 也许我错了。
这可能是一个旧的,但我找不到任何东西。有谁知道为什么会这样:
Convert.ToDecimal("3.14521963414679E-08")
投掷
FormatException ("输入字符串的格式不正确。")
但是,这按预期工作吗?
Convert.ToDouble("3.14521963414679E-08")
我认为 Convert.ToDecimal 可以处理指数 - 也许我错了。
Convert.ToDecimal
不支持科学记数法。
记录了Convert.ToDecimal
内部使用Decimal.Parse
和该使用的状态的文档Decimal.Parse
NumberStyles.Number
,因此只有以下内容是有效的输入:
[ws][sign][digits,]digits[.fractional-digits][ws]
为了支持科学记数法,您将不得不使用另一个重载Decimal.Parse
允许您指定NumberStyles
要使用的:
var result = decimal.Parse("3.14521963414679E-08",
NumberStyles.Number | NumberStyles.AllowExponent);
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。
因为这个->
ToDecimal(String) - 将数字的指定字符串表示形式转换为等效的十进制数。.
ToDouble(String) - 将数字的指定字符串表示形式转换为等效的双精度浮点数。
如需进一步说明,请访问 - http://msdn.microsoft.com/en-us/library/System.Convert_methods.aspx
希望能帮助到你..:)