OVH Cloud OVH Cloud

NumberFormat ...

1 réponse
Avatar
Reno
Bonjour à tous.

J'ai un petit soucis avec l'API NumberFormat et en particulier sa méthode
parse.

Voiçi une petite class de test :
(nb : le séparateur des milliers en chinois est la virgule, et le séparateur
décimal est le point)

public static void main (String[] args){
NumberFormat myFormatter = NumberFormat.getInstance(Locale.CHINESE);
ArrayList listNumber = new ArrayList();

listNumber.add("1.2");
listNumber.add("1,2");
listNumber.add("12");
listNumber.add("123");
listNumber.add("1234");
listNumber.add("1,234");
listNumber.add("1,234.5");
listNumber.add("1.234,5");
listNumber.add("1 234.5");
listNumber.add("1 234,5");

for (int i=0; i<listNumber.size(); i++){
String strNumber = (String)listNumber.get(i);
try {
Number parsedNumber = myFormatter.parse(strNumber);
double dblNumber = parsedNumber.doubleValue();
System.out.println(strNumber + " : " + dblNumber);
} catch (ParseException e) {
System.out.println(strNumber + "n'a pu être parsé");
}
}
}

cette petite class compile et tourne mais le résultat est assez surprenant.
la voilà ...

1.2 : 1.2 // OK
1,2 : 12.0 // // le format n'est pas correct on aurait dû passer dans
l'exception, non ?
12 : 12.0 // OK
123 : 123.0 //OK
1234 : 1234.0 //OK ... quoique ...
1,234 : 1234.0 //OK
1,234.5 : 1234.5 //OK
1.234,5 : 1.234 // le format n'est pas correct on aurait dû passer dans
l'exception, non ?
1 234.5 : 1.0 // le format n'est pas correct on aurait dû passer dans
l'exception, non ?
1 234,5 : 1.0 // le format n'est pas correct on aurait dû passer dans
l'exception, non ?

Auriez vous une explication a ce comportement plus que permissif ? Et auriez
vous une idée pour lever une exception lorsque le format n'est pas
Strictement respecté. (un peu comme le setLeniente dans le parseDate)

D'avance merci pour vos réponses :o)

1 réponse

Avatar
damien guerin
Il est écrit dans la doc "The method may not use the entire text of
the given string."
Ce qui explique ce comportement.

Peut-être essayer ça : "public abstract Number parse(String source,
ParsePosition parsePosition)"