2013-07-11 26 views
10

Po wyszukiwaniu w Google, korzystając z poniższego kodu nadal nie może zostać skompilowanyJak przekonwertować notację naukową na dziesiętną?

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

Czy _convert_ z ciągu znaków? Nie możesz po prostu wpisać literału '2.09550901805872E-05M'? –

+0

tylko tryparse można skompilować – ControlPoly

Odpowiedz

19

Trzeba dodać NumberStyles.AllowDecimalPoint też:

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

MSDN jest jasne, że:

Wskazuje, że ciąg numeryczny może być zapisany w notacji wykładniczej. Flaga AllowExponent pozwala sparsowanemu ciągowi znaków zawierać wykładnik rozpoczynający się od znaku "E" lub "e", po którym następuje opcjonalny znak dodatni lub ujemny oraz liczba całkowita. Innymi słowy, to pomyślnie analizuje łańcuchy w postaci nnnExx, nnnE + xx i nnnE-xx. Nie zezwala na separator dziesiętny ani znak w significand lub mantysa; aby umożliwić przetwarzanie tych elementów w łańcuchu, użyj flag AllowDecimalPoint i AllowLeadingSign lub użyj stylu złożonego zawierającego te poszczególne flagi.

2

Ponieważ separator dziesiętny ("." W twoim ciągu) może się różnić w zależności od kultury, do bezpieczniej jest używać kultury niezmiennej. Nie zapomnij, aby umożliwić ten separator dziesiętny (NumberStyles.Float)

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

Perharps, wygodniejsze kod jest gdy używamy NumberStyles.Any:

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

użycie System.Globalization.NumberStyles.Any

decimal h2 = Decimal.Parse("2.09550901805872E-05", System.Globalization.NumberStyles.Any); 
Powiązane problemy