2014-07-01 2 views
0

J'essaye de convertir une chaîne "8.7" en nombre, mais tous mes essais la convertissent en 87 pas en 8.7. Voici comment j'ai essayé.C# Convertir une chaîne en nombre

string wind_kph = "8.7" 
if (Convert.ToDouble(wind_kph) > 60.00f) 

vrai

if ((int)Convert.ToDouble(wind_kph) > 60.00f) 

vrai

if (Convert.ToDecimal(wind_kph) > 60.00f) 

vrai

+3

Avez-vous des paramètres de localisation susceptibles d'interférer avec l'analyse? Je crois que le point décimal est une virgule dans certaines cultures. Le code que vous avez ressemble à ça * devrait * fonctionner si. – BradleyDotNET

+0

Quelle est votre culture locale? De nombreuses cultures eurppéennes traitent «8.7» comme «87» et «8.7» comme «8.7»; Je soupçonne que vous pouvez fixer beaucoup ici simplement en spécifiant explicitement une culture (peut-être la culture invariante). –

+0

La première ligne devrait être ";" terminé. Comment compile-t-il avec une erreur de syntaxe? Rgds, –

Répondre

4

Vous pouvez utiliser InvariantCulture pour l'analyse qui utilise dot comme séparateur décimal

if(double.Parse(wind_kph, CultureInfo.InvariantCulture) > 60.00) 

Vous trouverez des informations plus détaillées dans la documentation de la méthode double.Parse(string), la partie pertinente est:

Le paramètre de est interprété en utilisant les informations de mise en forme dans un objet NumberFormatInfo qui est initialisé pour le thread courant Culture. Pour plus d'informations, voir CurrentInfo. Pour analyser une chaîne à l'aide des informations de formatage d'une autre culture, appelez la méthode Double.Parse(String, IFormatProvider) ou Double.Parse(String, NumberStyles, IFormatProvider).

+0

Merci, c'était le problème. Ma sélection de langue ne reconnaissait qu'un, pas un. – Aman

3

Il s'agit probablement d'un problème de culture. Si elles ne sont pas explicitement spécifiées, les fonctions d'analyse utilisent la culture de thread en cours. Pour spécifier une culture spécifique, vous pouvez envoyer un deuxième paramètre à la fonction double.Parse. Dans votre cas pour "." vous pouvez utiliser InvariantCulture.

double.Parse("8.7", CultureInfo.InvariantCulture); 
Questions connexes