Problème IDIOT de conversion string->float [RESOLU] - C#/.NET managed - Programmation
Marsh Posté le 12-02-2007 à 17:36:44
Ah oui, et le plus drôle...Maintenant si je déclare test avant le try comme ceci:
Code :
|
test vaut toujours 0 au final mais aucune exception n'est lancée
Marsh Posté le 12-02-2007 à 17:46:43
akalash47 a écrit : Ah oui, et le plus drôle...Maintenant si je déclare test avant le try comme ceci:
|
La je ne saurais te dire pourquoi. Par contre, le string en entrée de tryparse dépends de la culture courante, c.a.d. ile te faut mettre "12,6" dans ton cas. une surchage existe permettant de spécifier une culture différente
Marsh Posté le 12-02-2007 à 17:49:31
Okéééé. C'est bon à savoir. Merci d'avoir répondu si vite
Marsh Posté le 12-02-2007 à 20:52:03
D'une manière générale, lors de conversion il vaut toujours mieux préciser un IFormatProvider, même si c'est pour mettre System.Globalization.CultureInfo.InvariantCulture.
Cela optimise le code MSIL, dixit FxCop (outil MS d'analyse de code). De plus, un TryParse correctement utilisé dispense d'un bloc try catch justement
Essaie
Code :
|
edit : et d'ailleurs TryParse renvoie un booléen pour savoir si la conversion a réussi/est possible
Marsh Posté le 13-02-2007 à 15:13:57
Ouais c'est plus propre effectivement, mais ça ne marche pas bien. Curieux.
Donc je me suis débrouillé autrement:
Code :
|
Peut-être moins optimisé, mais au moins ça fonctionne ^^
Marsh Posté le 13-02-2007 à 16:37:05
tout ca pour convertir une string vers un float????
c'est beau le .NET heuresement que tout ne fonctionne pas la dessus sinon on est tous bon pour s'acheter des core2duo.........
Marsh Posté le 13-02-2007 à 16:41:23
red faction a écrit : tout ca pour convertir une string vers un float???? c'est beau le .NET heuresement que tout ne fonctionne pas la dessus sinon on est tous bon pour s'acheter des core2duo......... |
ça n'est absolument pas lié à .Net. Même si .Net n'a pas de support pour une locale par fonction ou des contextes de locale, il y a ce qu'il faut pour travailler. Et la locale est par thread ce qui est très bien puisque ça veut dire que tu ne perturbes que toi.
Si tu étais en C, tu n'aurais pas pu résoudre ce problème autrement quand ayant une fonction différente de lecture qui ignore la locale. C'est d'ailleurs ce que fait glib avec son g_ascii_strtod par exemple.
C'est un problème très courant.
Marsh Posté le 13-02-2007 à 16:44:47
red faction a écrit : tout ca pour convertir une string vers un float???? |
T'y connais rien hein ?
Marsh Posté le 13-02-2007 à 17:44:07
ok ca va javais pas vu que cetait un probleme de parametres regionaux........
bon je vous laisse les WardlordZ de la programmation , apres tout moi je n'ais pas fait bac+15 comme vous...
Marsh Posté le 13-02-2007 à 18:04:41
Un peu cavalier comme sortie, mais ça ira pour cette fois
Marsh Posté le 13-02-2007 à 20:16:50
akalash47 a écrit : Ouais c'est plus propre effectivement, mais ça ne marche pas bien. Curieux. |
Très
Au pire tu pouvais passer directement new CultureInfo("en-US" ) plutôt que de changer la culture du Thread (ce qui n'est d'ailleurs pas toujours possible par défaut suivant le type d'application sans les attributs de classe qui vont bien) et de ne pas préciser de IFormatProvider
Marsh Posté le 13-02-2007 à 20:28:07
akalash47 a écrit : Ah oui, et le plus drôle...Maintenant si je déclare test avant le try comme ceci:
|
ce qui est drole c'est que tryparse ne s'utilise pas du tout comme ca... msdn toossa...
Marsh Posté le 13-02-2007 à 20:28:40
pikti a écrit : |
oh tu vas rire, c'est meme a ca que ca sert !
Marsh Posté le 13-02-2007 à 20:30:52
pikti a écrit : Très |
Indice : msdn DecimalSeparator
Marsh Posté le 13-02-2007 à 20:42:47
Edit: J'y comprends rien! J'ai redémarré l'ordinateur, recompilé la solution sans rien changer...et bien le code "float value = Single.Parse ( textBoxControl.Text, new CultureInfo("en-US" ) );" marche maintenant!
Un peu bizarre cette histoire
Marsh Posté le 13-02-2007 à 21:25:52
Tamahome a écrit : Indice : msdn DecimalSeparator |
AllowDecimalPoint
pikti a écrit :
|
Marsh Posté le 13-02-2007 à 23:00:08
euh je pensais pas a ca, mais bon...
Et surtout tester la valeur de retour du TryParse, c'est comment dire, obligatoire
Marsh Posté le 12-02-2007 à 17:33:08
Bonjour,
J'essaie désespérément de convertir une chaine de caractère vers un float mais quel que soit la fonction ou/et les paramètres utilisés, j'aboutis toujours à une exception!
Le code que j'essaie, le plus bidon du monde:
Hé bien non, après le passage par le TryParse test vaut toujours 0 et une exception est lancée!
Qu'est-ce qui ne va pas d'après vous?
Message édité par akalash47 le 13-02-2007 à 21:15:28