Convertir correctement une string en float

Convertir correctement une string en float

Lorsque l’on souhaite convertir une string vers un flottant (ou double), il est possible de rencontrer des problèmes sur des environnements en langue étrangère. Nous allons donc voir pourquoi et comment le solutionner.

Par défaut quand on a besoin de faire une telle conversion, on va utiliser l’instruction suivante :

String maStr = "125,8";
float value=float.Parse(maStr);

Si vous exécutez ce programme, il fonctionnera sans problème. Maintenant si un anglais exécute ce programme, une exception sera lancée.Pourquoi ?

La réponse est : la globalisation !

En france, on utilise la virgule comme séparateur décimal, alors qu’au états-unis, il utilise le point comme séparateur, la virgule servant de séparateur entre les milliers.

  • France : 1254,56
  • Etats Unis : 1,254.56

 

Lorsque vous avez à parser des fichiers de données (XML, CSV, autres) ceci peut donc poser beaucoup de problème.

Autant le dire tout de suite :

String maStr = "125,8";
float value=float.Parse(maStr.Replace(",",".");

est à bannir tout de suite.

La solution a suivre est la suivante :

NumberFormatInfo nfi = new NumberFormatInfo(){NumberDecimalSeparator = ","};
String maStr = "125,8";
float value = float.Parse(maStr, nfi);

On est ainsi sûr du format utilisé et on aura donc plus de soucis avec la gestion de la globalisation.

Comments are closed.