Java 8 introduce un cambio de comportamiento en el comportamiento de redondeo de números decimales utilizando el método format en el
java.text.NumberFormat
y el
java.text.DecimalFormat
cuando el valor está muy cerca de un empate, sentado exactamente en la posición de redondeo especificada en el patrón de formato. El cambio afecta a los números con una
representación numérica binaria que no es exacta.
Por ejemplo, la aproximación binaria más cercana de 0.015 que puede calcular un sistema PC es 0.01499999999999999944488848768742172978818416595458984375. Si redondea ese número a dos dígitos , en Java 8 la respuesta es .01 porque .004999999... es menor que .005. En versiones anteriores de Java, el resultado es 0.02.
Esta regla señala las llamadas a los métodos format
NumberFormat y DecimalFormat cuando los métodos se
invocan con una primitiva double o un objeto
java.lang.Double como primer parámetro.
El ejemplo siguiente muestra el uso de los métodos format.
Si ejecuta este código utilizando Java 7, el resultado será:
format(0.8055) devuelve "0.806". Se esperaba "0.805".En Java 8, el resultado obtenido es:
format(0.8055) devuelve "0.805". Se esperaba "0.805".Tenga en cuenta este cambio de comportamiento, pues podría afectar a los resultados del programa. El informe de error JDK-7131459 proporciona más información y muestra varios informes afines, incluidos informes de error para Java 8 que notifican este comportamiento como una regresión.
Para obtener más información sobre las clases afectadas, consulte los recursos siguientes: