2016-06-06 26 views
5

Ich analysierte Fall, wo DecimalFormat gerundet eine BigDecimal Nummer und auf andere Maschine, ist es abgeschnitten.DecimalFormat führt zu zwei verschiedenen Ergebnissen auf verschiedenen Maschinen

Ich habe alle Konfigurationen auf beiden Maschinen überprüft (und alle sind gleich, nehme ich an). Der einzige Unterschied, den ich herausgefunden habe, ist JDK-Version.

Maschine 1 läuft auf JDK1.6. Aber, ich habe dasselbe mit JDK1.7 auf Maschine 1 versucht, es funktioniert dasselbe wie mit JDK1.6.

Maschine 2 auf JDK1.7 läuft

Es folgt der Code-Schnipsel:

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 Ergebnis ist: 3,39

On Machine 2 Ergebnis: 3,38

+2

Ich sehe nicht, wie die Zahl 3.8880 gerundet oder auf 3,38 oder 3,39 abgeschnitten werden konnte. Meinst du 3.88/3.89? Oder hast du den Test nicht richtig gemacht? –

+0

Versuchen Sie, auf der Eingabeaufforderung "Java-Version" auszuführen. Vielleicht nur ein JVM-Bug. – Aris2World

Antwort

6

Es wurde ein Fehler in JDK7 unter DecimalFormat eingeführt. Siehe diese Frage für weitere Informationen: Is inconsistency in rounding between Java 7 and Java 8 a bug?

+0

Danke Arnaud, ich habe es auch auf der Orakelseite überprüft und festgestellt, dass dort auch der gleiche Fehler gemeldet wird. Überprüfen Sie diese Referenz [Bug on Oracle] (https://bugs.openjdk.java.net/browse/JDK-8039915) Website –