DecimalFormat rounding changes in 8 (JEP 177)?

solo-java-core-libs at solo-java-core-libs at
Sun May 4 16:56:23 UTC 2014


Could someone please help me understand what changes have happened in
rounding in DecimalFormat in Java 8?

new DecimalFormat("0.00").format(1.035) is 1.04 on Java 7, and 1.03 on
Java 8.  (7u25-2.3.10-1~deb7u1, openjdk build 1.8.0_05-b13 debian and
Oracle build 1.8.0-b132 win64 tested).

My understanding of the RoundingMode.HALF_EVEN (the default)
documentation is that 1.04 is the correct answer.  In fact,
(0.000, 1.0035) is 1.004, and (0.0, 1.35) is 1.4.  I am aware
that floating point is more complex than this, and I am by no
means an expert.

It seems that this may be new code, with a known breaking change in it:
> Compatibility: On JDK 7, (correct) but altered numerical behavior will
> only be enabled under an aggressive optimization flag to limit
> behavioral compatibility impact in that release train. In Java SE 8,
> the correct numerical behavior will always be required by the
> specification.

Did this materialise somewhere, and, if so, where's it documented?

In summary: My tests fail on Java 8 and I'm not sure they're wrong.
Any help would be appreciated, thanks.

More information about the core-libs-dev mailing list