Java 8 introduce o schimbare de comportament în comportamentul de rotunjire a numerelor zecimale folosind metoda format pe
java.text.NumberFormat
și
java.text.DecimalFormat
clase atunci când valoarea este foarte aproape de o cravată, stând exact la poziția de rotunjire specificate în modelul de formatare. Modificarea afectează numerele cu o reprezentare numerică
binară care nu este exactă.
De exemplu, cea mai apropiată aproximare binară de 0.015 pe care un computer o poate atinge este 0.01499999999999999944488848768742172978818416595458984375. Dacă rotunjiţi în jos acel număr la două cifre, în Java 8 răspunsul este 0,01 pentru că 0,004999999 .... este mai mic decât 0,005. În versiunile anterioare de Java, răspunsul este 0,02.
Această regulă semnalează apelurile către metodele NumberFormat şi
DecimalFormat format atunci când sunt apelate cu
o primitivă double sau cu un obiect java.lang.Double
ca prim parametru.
Următorul exemplu arată utilizarea metodelor format.
Dacă apelaţi acest cod folosind Java 7, este afişat următorul rezultat:
format(0.8055) returnează "0.806". Se aștepta "0.805".În Java 8, este afişat următorul rezultat:
format(0.8055) returnează "0.805". Se aștepta "0.805".Ţineţi cont de această schimbare de comportament, deoarece v-ar putea afecta ieşirea de program. JDK-7131459 bug report furnizează mai multe informaţii şi arată un număr de rapoarte înrudite, inclusiv rapoarte de bug-uri din Java 8 care le raportează ca o regresie.
Pentru informaţii suplimentare despre clasele afectate, consultaţi următoarele resurse: