DigitList bug in recent patch (original) (raw)

Brian Burkhalter brian.burkhalter at oracle.com
Wed Mar 27 14:29:52 UTC 2013


Interesting. This week I was just running some regression tests against the updated patch for 7032154 (not yet posted) and the only failures I found were in the HALF_* cases in TieRoundingTest.

I'll check out what you reported while looking into it.

Thanks,

Brian

On Mar 27, 2013, at 12:50 AM, Frank Ding wrote:

Current JDK gives the output of "78.0001".

Best regards, Frank On 3/27/2013 3:48 PM, Frank Ding wrote: Hi guys, We noticed there is a recent change (patch @ http://hg.openjdk.java.net/jdk8/jdk8/jdk/rev/bc1f16f5566f ) that changed the behavior of the following program.

import java.math.RoundingMode; public class TestNumberFormat { public static void main(String[] args) { java.text.NumberFormat numberFormat = java.text.NumberFormat.getInstance( java.util.Locale.US); double v = 78.00005; numberFormat.setMaximumFractionDigits(4); numberFormat.setRoundingMode(RoundingMode.HALFEVEN); numberFormat.setMinimumFractionDigits(0); numberFormat.setGroupingUsed(false); String ret = numberFormat.format(v); System.out.println(ret); } } Note the rounding mode HALFEVEN and the expected output should be "78" which can also be verified by running previous jdk (before b73). Stepping into code and the suspicious code is in DigitList.shouldRoundUp(). allDecimalDigits is false so true is returned, causing the last digit in fraction part to be 1. case HALFEVEN: // Implement IEEE half-even rounding if (digits[maximumDigits] > '5') { return true; } else if (digits[maximumDigits] == '5' ) { if (maximumDigits == (count - 1)) { // the rounding position is exactly the last index : if (alreadyRounded) // If FloatingDecimal rounded up (value was below tie), // then we should not round up again. return false; if (!allDecimalDigits) // Otherwise if the digits dont represent exact value, // value was above tie and FloatingDecimal truncated // digits to tie. We must round up. return true; Since I am not familiar of the numeric conversion, can any one shed your light on it? Best regards, Frank



More information about the core-libs-dev mailing list