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.HALF_EVEN); >> numberFormat.setMinimumFractionDigits(0); >> numberFormat.setGroupingUsed(false); >> String ret = numberFormat.format(v); >> System.out.println(ret); >> } >> } >> >> Note the rounding mode HALF_EVEN 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 HALF_EVEN: >> // 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 >