Urgent [9], 3rd round, RFR (S) : JDK-8039915 NumberFormat.format() does not consider required no. of fraction digits properly

Joe Darcy joe.darcy at oracle.com
Thu Oct 9 17:16:37 UTC 2014


Hi Olivier,

Please change the formatting any if-else statements like

  537                     }
  538                     else {

  545                         }
  546                         else {

  552                             }
  553                             else {

to be

  537                     } else {

More substantively, these lines

  547                             // Not an exact binary representation.
  548                             if (alreadyRounded) {
  549                                 // Digit sequence rounded-up. Was 
below tie.
  550                                 // Don't round-up twice !
  551                                 return false;
  552                             }
  553                             else {
  554                                 // Digit sequence truncated. Was 
above tie.
  555                                 // must round-up !
  556                                 return true;
  557                             }

Can be replaced by

                                 return !alreadyRounded;

with appropriate commenting.

Please make these changes; as long as the tests still pass, no re-review 
is needed.

Thanks,

-Joe

On 10/9/2014 3:27 AM, olivier.lagneau at oracle.com wrote:
> Please review this 3rd version of the fix taking into account latest 
> feedback from Joe.
>
> Bug : https://bugs.openjdk.java.net/browse/JDK-8039915
> Webrev : http://cr.openjdk.java.net/~olagneau/8039915/webrev.02/ 
> <http://cr.openjdk.java.net/%7Eolagneau/8039915/webrev.02/>
>
> List of changes from previous webrev:
> - renamed "allDecimalDigits" to "valueExactAsDecimal"
> - changed related @param javadoc comments
> - restored conventional formatting on "else if" clause
> - changed rounding decision code when last digit at rounding position 
> and valueExactAsDecimal true to synthetic return statement:
>    "return roundingMode == RoundingMode.HALF_UP;" with adapted comment.
>
> testing: jtreg, jck8, jprt, code coverage.
>
> Thanks for reviewing,
> Olivier.
>
>
>
> On 07/10/2014 18:25, Joe Darcy wrote:
>> Hi Olivier,
>>
>> Some rewording suggestions:
>>
>>  445      * @param alreadyRounded Boolean indicating if rounding up 
>> already happened.
>>  446      * @param allDecimalDigits Boolean indicating if the digits 
>> provide an exact
>>  447      * representation of the value.
>>
>> Including the type of the parameter is redundant with its declaration 
>> so I'd recommend something like
>>
>>  445      * @param alreadyRounded whether or not rounding up has 
>> already happened.
>>
>> Given the semantics of allDecimalDigits, I recommend renaming the 
>> parameter to something like "valueExactAsDecimal".
>>
>> For
>>
>> please restore the conventional formatting
>>
>>  532                 } else if (digits[maximumDigits] == '5') {
>>
>> The code
>>
>>  543                             if (roundingMode == 
>> RoundingMode.HALF_UP) {
>>  544                                 // Strictly follow HALF_UP rule 
>> ==> round-up
>>  545                                 return true;
>>  546                             }
>>  547                             else {
>>  548                                 // Strictly follow HALF_DOWN 
>> rule ==> don't round-up
>>  549                                 return false;
>>  550                             }
>>
>> can be replaced by
>>
>>  545                                 return roundingMode == 
>> RoundingMode.HALF_UP;
>>
>> with a suitable comment.
>>
>> Please make these adjustments and I'll do a careful review of the 
>> rounding logic.
>>
>> Thanks,
>>
>> -Joe
>>
>> On 10/2/2014 9:29 AM, olivier.lagneau at oracle.com wrote:
>>> Please review this 2nd version of the fix taking into account your 
>>> feedback.
>>>
>>> Bug : https://bugs.openjdk.java.net/browse/JDK-8039915
>>> webrev : http://cr.openjdk.java.net/~olagneau/8039915/webrev.01 
>>> <http://cr.openjdk.java.net/%7Eolagneau/8039915/webrev.01>
>>> I have changed the code following your remarks
>>>
>>> Testing: lot of testing on jtreg, jck8, code coverage, jprt.
>>>
>>> Below are more details on the changes in this webrev.
>>>
>>> For the new work in question, it might be clearer to me if the 
>>> HALF_UP and HALF_DOWN cases
>>>>  were combined into a single block since they > share much of the 
>>>> logic.
>>>> The unique logic for each mode would be easier to see if the 
>>>> differences were placed together. 
>>> I have merged HALF_UP and HALF_DOWN cases into a single switch case.
>>>
>>> I also tested a fully merged version where HALF_UP, HALF_DOWN, and 
>>> also HALF_EVEN are merge
>>> into a single switch case. So merging the three is even possible.
>>> If you want to have the three HALF_* cases we can quickly move to that.
>>>
>>>> My only suggestions are trivial: 1) enhance the method javadoc of 
>>>> shouldRoundUp(), e.g., there are no @param tags for the boolean 
>>>> parameters,
>>> Fixed that. @param tags are available for shouldRoundUp method
>>>
>>>> 2) use braces around all the statements contained in if/else blocks 
>>>> (see below). Comment #2 is nit-picky.
>>> Took care to follow this rule in this new version.
>>>
>>>> If the test is already printing out the information you showed 
>>>> above (“Error formatting …”) then I think it is enough but the 
>>>> verbiage should perhaps match the reminder, e.g., “Failure: Error 
>>>> formatting double …”
>>> Changed test code to provide this consistent wording.
>>>
>>> Thanks,
>>> Olivier.
>>>
>>>
>>>
>>>
>>
>




More information about the core-libs-dev mailing list