這可能是一箇舊的,但我找不到任何東西。有沒有人有任何想法,爲什麼這樣的:( 「輸入字符串的不正確的格式」)Convert.ToDecimal引發的意外異常
Convert.ToDecimal("3.14521963414679E-08")
拋出
出現FormatException
然而,這按預期工作?
Convert.ToDouble("3.14521963414679E-08")
我以爲Convert.ToDecimal可以處理指數 - 也許我弄錯了。
這可能是一箇舊的,但我找不到任何東西。有沒有人有任何想法,爲什麼這樣的:( 「輸入字符串的不正確的格式」)Convert.ToDecimal引發的意外異常
Convert.ToDecimal("3.14521963414679E-08")
拋出
出現FormatException
然而,這按預期工作?
Convert.ToDouble("3.14521963414679E-08")
我以爲Convert.ToDecimal可以處理指數 - 也許我弄錯了。
Convert.ToDecimal
不支持科學記數法。
據記載,Convert.ToDecimal
內部使用Decimal.Parse
和documentation for 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
enumration一樣的;
Decimal.Parse("3.14521963414679E-08",
NumberStyles.AllowExponent | NumberStyles.AllowDecimalPoint);
這裏是一個DEMO。
謝謝 - 這是一個非常有用的加法Soner –
因爲這 - >
ToDecimal(字符串) - 一個數的指定字符串表示形式轉換爲等效的十進制數。。
ToDouble(字符串) - 將指定的數字字符串表示形式轉換爲等效的雙精度浮點數字的。
進一步澄清visit- http://msdn.microsoft.com/en-us/library/System.Convert_methods.aspx
希望它能幫助.. :)
哪種異常? – Lucas
可能是因爲「E」部分? – Nolonar
FormatException:「輸入字符串格式不正確。」我認爲Convert.ToDecimal可以處理指數? –