2010-07-13 4 views
4

J'essaie de convertir une chaîne en double valeur dans .Net 3.5. Assez facile à ce jour avecMauvaise valeur avec double.Parse (chaîne)

double.Parse(value); 

Mon problème est que les valeurs avec des balises exponentielles ne sont pas droit converties. Exemple:

double value = double.Parse("8.493151E-2"); 

La valeur doit être = 0,0893151 droit? Mais ce n'est pas! La valeur est = 84931.51 !!!

Comment cela peut-il être? Je suis totalement confus!

J'ai lu la référence dans la bibliothèque msdn et confirme que des valeurs comme "8.493151E-2" sont supportées. J'ai également essayé des surcharges de double.Parse() avec NumberStyles, mais pas de succès.

Aidez s'il vous plaît!

Répondre

15

Il fonctionne pour moi:

double.Parse("8.493151E-2"); 
0.08493151 

Vous êtes probablement dans un environnement linguistique qui utilise , pour le séparateur décimal et . pour le séparateur de milliers.
Par conséquent, il est traité comme 8,493,151E-2, ce qui est en fait équivalent à 84,931.51.

Modifier à

double value = double.Parse("8.493151E-2", CultureInfo.InvariantCulture); 
+0

Ok, ça marche! Je n'ai pas essayé de l'utiliser avec IFormatProvider Merci! – Kai

+0

@flashfail - si vous ne spécifiez pas 'IFormatProvider', il utilisera les paramètres régionaux de votre ordinateur. Vous donnez votre emplacement comme "DE Oldenburg", que je suppose être en Allemagne - où vous utilisez une virgule décimale et "." comme le séparateur des milliers. – ChrisF

Questions connexes