2013-07-11 86 views
10

在谷歌搜索後,使用下面的代碼仍然不能編譯如何將此科學記數法轉換爲小數?

decimal h = Convert.ToDecimal("2.09550901805872E-05"); 
decimal h2 = Decimal.Parse("2.09550901805872E-05", System.Globalization.NumberStyles.AllowExponent); 
+0

你需要_convert_從一個字符串?難道你只是輸入文字'2.09550901805872E-05M'? –

+0

只能編譯tryparse – ControlPoly

回答

2
Decimal h2 = 0; 
Decimal.TryParse("2.005E01", out h2); 
19

您必須添加NumberStyles.AllowDecimalPoint太:

Decimal.Parse("2.09550901805872E-05", NumberStyles.AllowExponent | NumberStyles.AllowDecimalPoint); 

MSDN對此也很清楚:

表示數字字符串可以是指數表示法。 AllowExponent標誌允許解析的字符串包含一個以「E」或「e」字符開頭的指數 ,後面跟着一個 可選的正號或負號以及一個整數。換句話說,它 成功解析nnnExx,nnnE + xx和nnnE-xx格式的字符串。 它不允許小數點分隔符或登錄有效數或尾數爲 ;要允許解析字符串中的這些元素,請使用AllowDecimalPoint和AllowLeadingSign標誌或使用包含這些單獨標誌的複合樣式 。

2

由於文化與文化之間的小數點分隔符(「。」)可能因文化而異 使用Invariant文化會更安全。不要忘了讓該小數 分離器(NumberStyles.Float)

decimal h = Decimal.Parse("2.09550901805872E-05", NumberStyles.Float | NumberStyles.AllowExponent, CultureInfo.InvariantCulture); 

Perharps,更方便的代碼是,當我們使用NumberStyles.Any:

decimal h = Decimal.Parse("2.09550901805872E-05", NumberStyles.Any, CultureInfo.InvariantCulture); 
1

使用System.Globalization.NumberStyles.Any

decimal h2 = Decimal.Parse("2.09550901805872E-05", System.Globalization.NumberStyles.Any); 
相關問題