Hey,

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:

http://openjdk.java.net/jeps/177:
> 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.

Reply via email to