RFR: 8314169: Combine related RoundingMode logic in j.text.DigitList

Naoto Sato naoto at openjdk.org
Fri Aug 11 23:03:58 UTC 2023


On Fri, 11 Aug 2023 18:27:47 GMT, Justin Lu <jlu at openjdk.org> wrote:

> Please review this PR which is a broad clean up of the DigitList class (used by Format classes in j.text).
> 
> This PR is intended to be a portion of a bigger change (split up to make reviewing easier). 
> 
> The main change combines related Rounding Mode logic in `shouldRoundUp()` - (_CEILING/FLOOR_, _HALF_UP/DOWN/EVEN_)
> 
> Other changes include
> - Certain for loops can be replaced with cleaner syntax (E.g. for(;;), empty for loops)
> - Introduce overloaded `round(int)` - For use by Integer representations of DigitList
> - Introduce `non0AfterIndex(int)` - To reduce code duplication

src/java.base/share/classes/java/text/DigitList.java line 123:

> 121:      * from the given index until the end.
> 122:      */
> 123:     private boolean non0AfterIndex(int index) {

I'd prefer spelling out `0` to `Zero`.

src/java.base/share/classes/java/text/DigitList.java line 409:

> 407:      * Upon return, count will be less than or equal to maximumDigits.
> 408:      */
> 409:     private void round(int maximumDigits) {

If the method is only used for `Long` and `BigInteger`, probably use the specific name instead of explaining it in the description and overloading would be more clear to me.

src/java.base/share/classes/java/text/DigitList.java line 521:

> 519:                 if (non0AfterIndex(maximumDigits)) {
> 520:                     return (isNegative && roundingMode == RoundingMode.FLOOR)
> 521:                             || (!isNegative && roundingMode == RoundingMode.CEILING);

`roundingMode` is checked against `FLOOR`/`CEILING` twice. I don't see the need of bundling them up.

src/java.base/share/classes/java/text/DigitList.java line 526:

> 524:             case HALF_UP:
> 525:             case HALF_DOWN:
> 526:                 case HALF_EVEN:

Fix the indentation

src/java.base/share/classes/java/text/DigitList.java line 543:

> 541:                                                 && (maximumDigits > 0) && (digits[maximumDigits - 1] % 2 != 0));
> 542:                                 // Not already rounded, and not exact, round up
> 543:                             } else {

Are you sure this logic is equivalent to the previous one? Previously, `HALF_UP/DOWN` checks `valueExactAsDecimal` before `alreadyRounded`, but the new one checks `alreadyRounded` first.

-------------

PR Review Comment: https://git.openjdk.org/jdk/pull/15252#discussion_r1291822984
PR Review Comment: https://git.openjdk.org/jdk/pull/15252#discussion_r1291829499
PR Review Comment: https://git.openjdk.org/jdk/pull/15252#discussion_r1291833892
PR Review Comment: https://git.openjdk.org/jdk/pull/15252#discussion_r1291834906
PR Review Comment: https://git.openjdk.org/jdk/pull/15252#discussion_r1291843188


More information about the core-libs-dev mailing list