Double avec . => bug
Résolu
Heikronenfe
Messages postés
9
Statut
Membre
-
Heikronenfe Messages postés 9 Statut Membre -
Heikronenfe Messages postés 9 Statut Membre -
Bonjour à tous,
j'aimerais que l'utilisateur rentre une valeur à l'aide d'un scan :
J'ai testé, et si je rentre par exemple 2.3, j'ai directement un bug. Par contre j'ai testé avec 2,3 et ça marche très bien.
A quoi est dû ce problème ? Comment y remédier ?
Merci d'avance.
j'aimerais que l'utilisateur rentre une valeur à l'aide d'un scan :
Scanner sVal = new Scanner(System.in);
double val = sVal.nextDouble();
J'ai testé, et si je rentre par exemple 2.3, j'ai directement un bug. Par contre j'ai testé avec 2,3 et ça marche très bien.
A quoi est dû ce problème ? Comment y remédier ?
Merci d'avance.
2 réponses
-
Bonjour,
Ce n'est pas vraiment un bug, Java détecte que tu es français, or en France un nombre à virgule s'écrit... avec une virgule ! C'est ce que l'on appelle la localisation.
Du coup lorsque tu fais un nextDouble, le Scanner s'attend à avoir une valeur au format français, de même que le ferait Excel par exemple.
Si tu veux prendre des points à la place des virgules, il faut modifier le Scanner pour qu'il prenne en compte une langue où les nombres décimaux s'écrivent avec des points, par exemple l'anglais.
Scanner sVal = new Scanner(System.in); // Locale.FRANCE par défaut double val = sVal.nextDouble(); // "2,3" System.out.printf("%f",val); // "2,300000" Scanner sVal = new Scanner(System.in).useLocale(Locale.ENGLISH); double val = sVal.nextDouble(); // "2.3" System.out.printf(Locale.ENGLISH,"%f",val); // "2.300000"
La confiance n'exclut pas le contrôle -