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.