src/java.base/share/classes/java/text/DigitList.java
Print this page
*** 1,7 ****
/*
! * Copyright (c) 1996, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
--- 1,7 ----
/*
! * Copyright (c) 1996, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
*** 518,540 ****
return isNegative;
}
}
break;
case HALF_UP:
! if (digits[maximumDigits] >= '5') {
! // We should not round up if the rounding digits position is
! // exactly the last index and if digits were already rounded.
! if ((maximumDigits == (count - 1)) &&
! (alreadyRounded))
return false;
!
! // Value was exactly at or was above tie. We must round up.
return true;
}
break;
case HALF_DOWN:
if (digits[maximumDigits] > '5') {
return true;
} else if (digits[maximumDigits] == '5' ) {
if (maximumDigits == (count - 1)) {
// The rounding position is exactly the last index.
if (allDecimalDigits || alreadyRounded)
--- 518,560 ----
return isNegative;
}
}
break;
case HALF_UP:
! if (digits[maximumDigits] > '5') {
! // Value was above tie, whatever did FloatingDecimal
! return true;
! }
! else if (digits[maximumDigits] == '5') {
! // Digit at rounding position is a '5'. Tie cases.
! if (maximumDigits != (count - 1))
! // Remaining digits. Above tie => must round-up
! return true;
! else {
! // Digit at rounding position is the last one !
! if (allDecimalDigits)
! // Exact binary representation. On the tie.
! // Strictly follow HALF_UP rule ==> round-up
! return true;
! else {
! if (alreadyRounded)
! // Digit sequence rounded-up. Was below tie.
! // Don't round-up twice !
return false;
! else
! // Digit sequence truncated. Was above tie
! // HALF_UP rule ==> must round-up !
return true;
}
+ }
+ }
+ // Digit at rounding position is < '5' ==> no round-up.
+ // Just let do the default, which is no round-up (thus break).
break;
case HALF_DOWN:
if (digits[maximumDigits] > '5') {
+ // Value was above tie, whatever did FloatingDecimal
return true;
} else if (digits[maximumDigits] == '5' ) {
if (maximumDigits == (count - 1)) {
// The rounding position is exactly the last index.
if (allDecimalDigits || alreadyRounded)
*** 543,553 ****
* an exact tie). We should not round up, following
* the HALF_DOWN rounding rule.
*/
return false;
else
! // Value was above the tie, we must round up.
return true;
}
// We must round up if it gives a non null digit after '5'.
for (int i=maximumDigits+1; i<count; ++i) {
--- 563,573 ----
* an exact tie). We should not round up, following
* the HALF_DOWN rounding rule.
*/
return false;
else
! // Value was above tie, we must round up.
return true;
}
// We must round up if it gives a non null digit after '5'.
for (int i=maximumDigits+1; i<count; ++i) {