web-dev-qa-db-fra.com

La chaîne d'entrée n'était pas au format correct n ° 2

double temp;
temp = (double)Convert.ToDouble("1234.5678");

Hey, mesdames et mesdames, je ne peux pas comprendre pourquoi la ligne ci-dessus ne fonctionne pas. La ligne ci-dessus me donne une erreur d'exécution qui dit:

Une exception non gérée de type System.FormatException s'est produite dans Mscorlib.dll

Informations complémentaires: La chaîne d'entrée N'était pas dans un format correct.

12
Keith Loughnane

Autant que je sache, les méthodes Convert utilisent les paramètres régionaux actuels pour effectuer de telles conversions. Dans ce cas, je suppose que vos paramètres régionaux actuels s’attendent à une virgule comme point décimal. Essayez de définir les paramètres régionaux actuels de votre application ou la conversion dans une langue/un pays dans lequel des points sont utilisés (par exemple, en_US). La méthode devrait fournir un deuxième paramètre facultatif pour fournir un IFormatProvider en tant que solution alternative.

23
Mario

Afin de convertir une chaîne en double sans exception:

Une exception non gérée du type System.FormatException s'est produite dans Mscorlib.dll

Informations complémentaires: Le format de la chaîne d'entrée était incorrect.

rendez-le insensible à la culture en fournissant la valeur de second paramètre CultureInfo.InvariantCulture , par exemple: 

double.Parse("1234.5678", CultureInfo.InvariantCulture) 
21
Vadim Gremyachev

première solution (comme mentionné dans d'autres messages):

double temp = double.Parse("1234.5678", CultureInfo.InvariantCulture);

deuxième solution - le rendre par défaut au thread actuel:

Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture;
double temp = double.Parse("1234.5678");

troisième solution - définissez par défaut le bloc de code:

var prevCurrentCulture = Thread.CurrentThread.CurrentCulture;
Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture;
...
double temp = double.Parse("1234.5678");
...
Thread.CurrentThread.CurrentCulture = prevCurrentCulture;
10
Bachor

Vous utilisez peut-être en quelque sorte un local européen. Dans certains pays, le. et, en chiffres, c'est inversé.

5
Steve Wellens

Bonjour, comme le dit Mario, vous devez l’analyser en tenant compte des paramètres régionaux.

double temp = double.Parse("1234.5678", System.Globalization.CultureInfo.CurrentCulture);

Cordialement.

4
Marco Medrano

Vérifiez vos paramètres régionaux. Votre symbole décimal doit être ".".

2
Tertius Geldenhuys
double temp = double.Parse("1234,5678");
0
Achilleterzo

Je ne vois aucun problème avec le code ci-dessus.Il fonctionne bien et affiche la valeur 1234.5678. Je l'ai essayé dans VS2008. Probablement quelque chose à voir avec les paramètres régionaux sur votre machine.

0
Kumar

Je vous recommande d'utiliser TryParse à la place, de sorte que vous n'avez pas besoin de gérer les exceptions d'analyse.

double temp = 0;
if (double.TryParse("123.456", out temp)
{
    Console.WriteLine(string.Format("Parsed temp: {0}", temp);
}
else
{
    Console.WriteLine("Input value was not able to be parsed.");
}
0
Mike Atlas

J'ai trouvé le problème lorsque vous laissez la zone de texte vide puis Cette erreur se produit, essayez donc celle-ci pour le gérer.

Une exception non gérée du type System.FormatException s'est produite dans Mscorlib.dll Informations supplémentaires: La chaîne d'entrée n'était pas au format correct .

if (!string.IsNullOrEmpty(Txt1.Text)) {int _qty = (int)Convert.ToInt32(Txt1.Text);}
0
Tahir Shahzad