2016-06-06 21 views
5

Stavo analizzando il caso in cui DecimalFormat ha arrotondato un numero BigDecimal e su un'altra macchina, è troncato.DecimalFormat genera due risultati diversi su macchine diverse

Ho verificato tutte le configurazioni su entrambe le macchine (e sono tutte uguali, presumo). Solo la differenza che ho capito è la versione JDK.

La macchina 1 funziona su JDK1.6. Ma, ho provato lo stesso con JDK1.7 su Machine 1, funziona come con JDK1.6.

Machine 2 è in esecuzione su JDK1.7

seguito è il frammento di codice:

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

sulla macchina 1 risultato è: 3.39

On Machine 2 risultato è: 3.38

+2

Non vedo come il numero 3.8880 potrebbe essere arrotondato o troncato a 3.38 o 3.39. Intendi 3.88/3.89? O non hai fatto il test correttamente? –

+0

Prova a eseguire il prompt dei comandi "java -version". Forse solo un bug JVM. – Aris2World

risposta

6

È stato introdotto un bug in JDK7 su DecimalFormat. Vedere questa domanda per ulteriori informazioni: Is inconsistency in rounding between Java 7 and Java 8 a bug?

+0

Grazie Arnaud, l'ho verificato anche sul sito di Oracle e ho trovato lo stesso bug riportato anche lì. Controlla questo riferimento [Bug su Oracle] (https://bugs.openjdk.java.net/browse/JDK-8039915) sito –

Problemi correlati