More generally, a rounding policy defines a mapping from the
real numbers to a subset of representable values. In the case of
BigDecimal, the representable values are a function of the
precision being used in the
computation. Assuming the mathematical result is within the
exponent range of BigDecimal, the mathematical result will
be exactly representable in the result precision or will fall
between two adjacent representable values. In the case of falling
between two representable values, the rounding policy determines
which of those two bracketing values is the result. For in-range
real numbers, for a given set of representable values, a rounding
policy maps a continuous segment of the real number line to a
single representable value where the real number numerically equal
to a representable value is mapped to that value.
Each rounding mode description includes a table listing how
different two-digit decimal values would round to a one digit
decimal value under the rounding mode in question. The result
column in the tables could be gotten by creating a
BigDecimal number with the specified value, forming a
MathContext object with the proper settings
(precision set to 1, and the
roundingMode set to the rounding mode in question), and
calling round on this number with the
proper MathContext. A summary table showing the results
of these rounding operations for all rounding modes appears below.
| Input Number | Result of rounding input to one digit with the given rounding mode | |||||||
|---|---|---|---|---|---|---|---|---|
UP |
DOWN |
CEILING |
FLOOR |
HALF_UP |
HALF_DOWN |
HALF_EVEN |
UNNECESSARY |
|
| 5.5 | 6 | 5 | 6 | 5 | 6 | 5 | 6 | throw ArithmeticException |
| 2.5 | 3 | 2 | 3 | 2 | 3 | 2 | 2 | throw ArithmeticException |
| 1.6 | 2 | 1 | 2 | 1 | 2 | 2 | 2 | throw ArithmeticException |
| 1.1 | 2 | 1 | 2 | 1 | 1 | 1 | 1 | throw ArithmeticException |
| 1.0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
| -1.0 | -1 | -1 | -1 | -1 | -1 | -1 | -1 | -1 |
| -1.1 | -2 | -1 | -1 | -2 | -1 | -1 | -1 | throw ArithmeticException |
| -1.6 | -2 | -1 | -1 | -2 | -2 | -2 | -2 | throw ArithmeticException |
| -2.5 | -3 | -2 | -2 | -3 | -3 | -2 | -2 | throw ArithmeticException |
| -5.5 | -6 | -5 | -5 | -6 | -6 | -5 | -6 | throw ArithmeticException |
This enum is intended to replace the integer-based
enumeration of rounding mode constants in BigDecimal
(BigDecimal#ROUND_UP, BigDecimal#ROUND_DOWN,
etc. ).
API Note
Five of the rounding modes declared in this class correspond to rounding-direction attributes defined in the IEEE Standard for Floating-Point Arithmetic. Where present, this correspondence will be noted in the documentation of the particular constant.
BigDecimal, MathContext
| Modifier and Type | Field and Description |
|---|---|
| public static final RoundingMode | CEILING
Rounding mode to round towards positive infinity. |
| public static final RoundingMode | DOWN
Rounding mode to round towards zero. |
| public static final RoundingMode | FLOOR
Rounding mode to round towards negative infinity. |
| public static final RoundingMode | HALF_DOWN
Rounding mode to round towards "nearest neighbor" unless both neighbors are equidistant, in which case round down. |
| public static final RoundingMode | HALF_EVEN
Rounding mode to round towards the "nearest neighbor" unless both neighbors are equidistant, in which case, round towards the even neighbor. |
| public static final RoundingMode | HALF_UP
Rounding mode to round towards "nearest neighbor" unless both neighbors are equidistant, in which case round up. |
| pack-priv final int | |
| public static final RoundingMode | UNNECESSARY
Rounding mode to assert that the requested operation has an exact result, hence no rounding is necessary. |
| public static final RoundingMode | UP
Rounding mode to round away from zero. |
| Access | Constructor and Description |
|---|---|
| private |
| Modifier and Type | Method and Description |
|---|---|
| public static RoundingMode | |
| public static RoundingMode | Returns: RoundingMode corresponding to the given integer.legacy integer rounding mode to convert rm)Returns the |
| public static RoundingMode[] |
| CEILING | back to summary | ||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| public static final RoundingMode CEILING Rounding mode to round towards positive infinity. If the
result is positive, behaves as for Example:
| |||||||||||||||||||||||
| DOWN | back to summary | ||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| public static final RoundingMode DOWN Rounding mode to round towards zero. Never increments the digit prior to a discarded fraction (i.e., truncates). Note that this rounding mode never increases the magnitude of the calculated value. API Note This rounding mode is analogous to the rounding policy used
for the Example:
| |||||||||||||||||||||||
| FLOOR | back to summary | ||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| public static final RoundingMode FLOOR Rounding mode to round towards negative infinity. If the
result is positive, behave as for Example:
| |||||||||||||||||||||||
| HALF_DOWN | back to summary | ||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| public static final RoundingMode HALF_DOWN Rounding mode to round towards "nearest neighbor"
unless both neighbors are equidistant, in which case round
down. Behaves as for Example:
| |||||||||||||||||||||||
| HALF_EVEN | back to summary | ||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| public static final RoundingMode HALF_EVEN Rounding mode to round towards the "nearest neighbor"
unless both neighbors are equidistant, in which case, round
towards the even neighbor. Behaves as for
API Note This
is the rounding mode that statistically minimizes cumulative
error when applied repeatedly over a sequence of calculations.
It is sometimes known as "Banker's rounding," and is
chiefly used in the USA. This rounding mode is analogous to
the rounding policy used for most Example:
| |||||||||||||||||||||||
| HALF_UP | back to summary | ||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| public static final RoundingMode HALF_UP Rounding mode to round towards "nearest neighbor"
unless both neighbors are equidistant, in which case round up.
Behaves as for Example:
| |||||||||||||||||||||||
| oldMode | back to summary |
|---|---|
| pack-priv final int oldMode | |
| UNNECESSARY | back to summary | ||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| public static final RoundingMode UNNECESSARY Rounding mode to assert that the requested operation has an exact
result, hence no rounding is necessary. If this rounding mode is
specified on an operation that yields an inexact result, an
Example:
| |||||||||||||||||||||||
| UP | back to summary | ||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| public static final RoundingMode UP Rounding mode to round away from zero. Always increments the digit prior to a non-zero discarded fraction. Note that this rounding mode never decreases the magnitude of the calculated value. Example:
| |||||||||||||||||||||||
| RoundingMode | back to summary |
|---|---|
| private RoundingMode(int oldMode) Constructor
| |
| valueOf | back to summary |
|---|---|
| public static RoundingMode valueOf(String name) | |
| valueOf | back to summary |
|---|---|
| public static RoundingMode valueOf(int rm) Returns the
| |
| values | back to summary |
|---|---|
| public static RoundingMode[] values() | |