Bonjour à tous,
Je rencontre actuellement un problème lors de la lecture d'un nombre saisie par un utilisateur (via un formulaire d'une application web). En effet, l'utilisateur doit pouvoir rentrer un nombre décimal avec un point ou une virgule comme séparateur décimal.
Dans un premier temps, j'avais réalisé la méthode suivante pour réaliser la conversion de la saisie :
Avec cette méthode, les saisies utilisant une virgule comme séparateur sont bien interprétées. Mais si on saisie "10.5" en paramètre, on récupère en sortie un double valant 10.0. Bref, la partie décimale est ignorée si on emploie le point comme séparateur.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 public static double parse(String priceformated) throws BusinessException { double result; try { DecimalFormat decimaleFormat = new DecimalFormat("0.00"); Number number = decimaleFormat.parse(priceformated); result = number.doubleValue(); } catch (ParseException ex) { throw new BusinessException(ex); } return result; }
J'ai donc essayé la méthode suivante :
Avec cette nouvelle méthode, tout fonctionne très bien.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 public static double parse(String priceformated) throws BusinessException { double result; try { char separateurVirgule = ','; NumberFormat nf = (priceformated.indexOf(separateurVirgule) == -1)?NumberFormat.getInstance(Locale.ENGLISH):NumberFormat.getInstance(Locale.FRENCH); Number number = nf.parse(priceformated); // DecimalFormat decimaleFormat = new DecimalFormat("0.00"); // Number number = decimaleFormat.parse(priceformated); result = number.doubleValue(); } catch (ParseException ex) { throw new BusinessException(ex); } return result; }
Par contre, je ne sais pas si c'est une bonne façon de faire. Je me demande s'il n'était pas possible dans la première méthode de définir deux séparateurs potentiels de décimales ('.' et ',') et laisser l'objet DecimalFormat parser ma chaine tout seul comme un grand.
Merci d'avance pour vos commentaires.
Partager