117 votes

Analyser un nombre à partir d'une notation exponentielle

Je dois analyser la chaîne "1.2345E-02" (un nombre exprimé en notation exponentielle) à un type de données décimales, mais Decimal.Parse("1.2345E-02") lance simplement une erreur

207voto

Hans Passant Points 475940

C'est un nombre à virgule flottante, vous devez lui dire que :

decimal d = Decimal.Parse("1.2345E-02", System.Globalization.NumberStyles.Float);

37voto

En plus de spécifier les NumberStyles, je vous recommande d'utiliser la fonction decimal.TryParse telle que :

decimal result;
if( !decimal.TryParse("1.2345E-02", NumberStyles.Any, CultureInfo.InvariantCulture, out result) )
{
     // do something in case it fails?
}

Comme alternative à NumberStyles.Tout ce que vous pouvez utiliser un ensemble spécifique si vous êtes certain de vos formats. par exemple :

NumberStyles.AllowExponent | NumberStyles.Float

15voto

Mitch Wheat Points 169614
decimal d = Decimal.Parse("1.2345E-02", System.Globalization.NumberStyles.Float);

13voto

KwentRell Points 347

Attention à la réponse sélectionnée : il y a une subtilité spécifiant System.Globalization.NumberStyles.Float dans Decimal.Parse qui pourrait conduire à un System.FormatException car votre système peut être en attente d'un nombre formé avec ',' au lieu de '.'

Par exemple, en notation française, "1.2345E-02" est invalide, vous devez d'abord le convertir en "1,2345E-02".

En conclusion, utilisez quelque chose du genre :

Decimal.Parse(valueString.Replace('.',','), System.Globalization.NumberStyles.Float);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X