2016-06-06 2 views
5

Je analysais cas où DecimalFormat arrondi un numéro BigDecimal et sur une autre machine, il est tronqué.DecimalFormat résultats dans deux résultats différents sur des machines différentes

J'ai vérifié toutes les configurations sur les deux machines (et toutes sont identiques, je suppose). Seule différence que j'ai compris, c'est la version JDK.

La machine 1 est en cours d'exécution sur JDK1.6. Mais, j'ai essayé même avec JDK1.7 sur la machine 1, il fonctionne même comme avec JDK1.6.

Machine 2 est en cours d'exécution sur JDK1.7

Après est l'extrait de code:

DecimalFormat decimalFormat = new DecimalFormat("#,###.00"); 
BigDecimal anObject = new BigDecimal("3.8880"); 
String str = decimalFormat.format(((Number)anObject).doubleValue()); 
System.out.println(str); 

On Machine 1 résultat est: 3,39

sur la machine 2 résultat est: 3,38

+2

Je ne vois pas comment le nombre 3.8880 pourrait être arrondi ou tronqué à 3.38 ou 3.39. Voulez-vous dire 3,88/3,89? Ou n'avez-vous pas fait le test correctement? –

+0

Essayez de courir sur l'invite de commande "java -version". Peut-être juste un bug de la JVM. – Aris2World

Répondre

6

Il y avait un bug introduit dans JDK7 sur DecimalFormat. Voir cette question pour plus d'informations: Is inconsistency in rounding between Java 7 and Java 8 a bug?

+0

Merci Arnaud, je l'ai également vérifié sur le site d'oracle et j'ai trouvé le même bug signalé là aussi. Consultez cette référence [Bug sur Oracle] (https://bugs.openjdk.java.net/browse/JDK-8039915) site –