Double avec . => bug

Résolu/Fermé
Heikronenfe Messages postés 9 Date d'inscription jeudi 7 juillet 2011 Statut Membre Dernière intervention 29 juin 2015 - 1 avril 2014 à 01:11
Heikronenfe Messages postés 9 Date d'inscription jeudi 7 juillet 2011 Statut Membre Dernière intervention 29 juin 2015 - 1 avril 2014 à 13:19
Bonjour à tous,

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:

2 réponses

KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
Modifié par KX le 1/04/2014 à 07:58
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
0
Heikronenfe Messages postés 9 Date d'inscription jeudi 7 juillet 2011 Statut Membre Dernière intervention 29 juin 2015
1 avril 2014 à 13:19
Ok merci beaucoup !
0