Convertir une chaine de caractères en nombre décimal
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 :
Code:
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;
} |
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.
J'ai donc essayé la méthode suivante :
Code:
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;
} |
Avec cette nouvelle méthode, tout fonctionne très bien.
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.