2013-07-11 78 views
-1

這可能是一箇舊的,但我找不到任何東西。有沒有人有任何想法,爲什麼這樣的:( 「輸入字符串的不正確的格式」)Convert.ToDecimal引發的意外異常

Convert.ToDecimal("3.14521963414679E-08") 

拋出

出現FormatException

然而,這按預期工作?

Convert.ToDouble("3.14521963414679E-08") 

我以爲Convert.ToDecimal可以處理指數 - 也許我弄錯了。

+2

哪種異常? – Lucas

+0

可能是因爲「E」部分? – Nolonar

+0

FormatException:「輸入字符串格式不正確。」我認爲Convert.ToDecimal可以處理指數? –

回答

8

Convert.ToDecimal不支持科學記數法。

據記載,Convert.ToDecimal內部使用Decimal.Parsedocumentation 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); 
+2

呃..我不明白爲什麼這個答案沒有被選中。 –

+0

這實際上更有用地回答了這個問題,所以我將其轉換爲可接受的答案。 –

1

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

+0

謝謝 - 這是一個非常有用的加法Soner –