Double avec . => bug
Résolu
Heikronenfe
Messages postés
9
Date d'inscription
Statut
Membre
Dernière intervention
-
Heikronenfe Messages postés 9 Date d'inscription Statut Membre Dernière intervention -
Heikronenfe Messages postés 9 Date d'inscription Statut Membre Dernière intervention -
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.
A voir également:
- Double avec . => bug
- Double ecran - Guide
- Whatsapp double sim - Guide
- Double driver - Télécharger - Pilotes & Matériel
- Double appel - Guide
- Double boot - Guide
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.
La confiance n'exclut pas le contrôle
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