Urgent  RFR (S) : JDK-8039915 NumberFormat.format() does not consider required no. of fraction digits properly
olivier.lagneau at oracle.com
olivier.lagneau at oracle.com
Tue Sep 23 12:21:50 UTC 2014
Thanks a lot for taking the time to review !
Please see comments inlined.
On 23/09/2014 04:51, Joe Darcy wrote:
> I've looked over the proposed changeset as well.
> I don't see a problem with the code, but I'm not (yet) convinced it is
> For future work, I think be clearer to combine the CEILING and FLOOR
> cases to share a loop with a condition test based on CEILING/FLOOR lie.
> In the test, again for future work, I think it would be clearer to
> create a custom class to represent the tuple of information needed for
> a test case as opposed to spreading that information about over a set
> of parallel arrays.
Sure. With this set of separate independent arrays, the test is
currently not much readable, and is weak with regards of maintenance
> 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 think so too. I even think it might be good to group HALF_EVEN with
those two, since behaviour of dtoa impacts
these 3 cases in the same manner when very close to tie.
Will change the code to group HALF_UP and HALF_DOWN.
> On 09/22/2014 08:50 AM, Brian Burkhalter wrote:
>> Hi Olivier,
>> On Sep 22, 2014, at 7:56 AM, olivier.lagneau at oracle.com wrote:
>>>> and 2) use braces around all the statements contained in if/else
>>>> blocks (see below). Comment #2 is nit-picky.
>>> I tried to keep the same flavour of writing as in HALF_DOWN and
>>> HALF_EVEN cases, i.e. don't use brace for
>>> terminal/leaf return true/false statements. This is not the standard
>>> however, at least in this file.
>>> Will use braces in all case (i.e. the 3 of HALF_UP, HALF_DOWN and
>> I did not look at the other case. If your formatting matches the rest
>> of the file then I think it is OK to leave it as-is.
>>>> Lastly and this is not really part of your changeset, but I found
>>>> it curious that the test prints the details of all cases that
>>>> succeed as opposed to those that fail. I would think that either
>>>> all results or the failures alone ought to be printed instead of
>>>> successes only. See for example the partial diff below the
>>>> DigitList diff.
>>> Since these are most often corner and tricky test cases I think it
>>> interesting to have the details of each result,
>>> including infos of both why returned result is correct or wrong.
>>> That can help the reader to understand all these tricky cases.
>>> The bad side of it being that it prints a lot of text, with failure
>>> cases (hoepfully few) lost in the middle of it,
>>> thus making failures possibly not immediate to detect.
>>> Here is an example of what is printed in case of failure:
>>> ***Error formatting double value from string : 0.6868d
>>> NumberFormat pattern is : #,##0.###
>>> Maximum number of fractional digits : 3
>>> Fractional rounding digit : 4
>>> Position of value relative to tie : above
>>> Rounding Mode : HALF_UP
>>> BigDecimal output :
>>> FloatingDecimal output : 0.6868
>>> Error. Formatted result different from expected.
>>> Expected output is : "0.687"
>>> Formated output is : "0.686"
>> I missed that output: I was looking for the word “failure.”
>>> There is also a reminder of the number of errors at the end of the
>>> ==> 4 tests failed
>>> Test failed with 4 formating error(s).
>>> May be providing a reminder (value + rounding-mode + rounding position)
>>> of the failure cases at the end of the would be better ?
>>> Test failed with 4 formating error(s) for following cases :
>>> - 0.3126d, HALF_UP rounding, 3 fractional digits
>>> - 0.6868d, HALF_UP rounding, 3 fractional digits
>>> - 1.798876d, HALF_UP rounding, 5 fractional digits
>>> - 1.796889d, HALF_UP rounding, 5 fractional digits
>>> Would doing so be ok ?
>> 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 …”
More information about the core-libs-dev