Skip to content

Commit 2593196

Browse files
committed
8264161: BigDecimal#stripTrailingZeros can throw undocumented ArithmeticException
Reviewed-by: bpb
1 parent 2a5e0dd commit 2593196

File tree

1 file changed

+15
-12
lines changed

1 file changed

+15
-12
lines changed

src/java.base/share/classes/java/math/BigDecimal.java

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -52,15 +52,15 @@
5252
*
5353
* <p>The {@code BigDecimal} class gives its user complete control
5454
* over rounding behavior. If no rounding mode is specified and the
55-
* exact result cannot be represented, an exception is thrown;
56-
* otherwise, calculations can be carried out to a chosen precision
57-
* and rounding mode by supplying an appropriate {@link MathContext}
58-
* object to the operation. In either case, eight <em>rounding
59-
* modes</em> are provided for the control of rounding. Using the
60-
* integer fields in this class (such as {@link #ROUND_HALF_UP}) to
61-
* represent rounding mode is deprecated; the enumeration values
62-
* of the {@code RoundingMode} {@code enum}, (such as {@link
63-
* RoundingMode#HALF_UP}) should be used instead.
55+
* exact result cannot be represented, an {@code ArithmeticException}
56+
* is thrown; otherwise, calculations can be carried out to a chosen
57+
* precision and rounding mode by supplying an appropriate {@link
58+
* MathContext} object to the operation. In either case, eight
59+
* <em>rounding modes</em> are provided for the control of rounding.
60+
* Using the integer fields in this class (such as {@link
61+
* #ROUND_HALF_UP}) to represent rounding mode is deprecated; the
62+
* enumeration values of the {@code RoundingMode} {@code enum}, (such
63+
* as {@link RoundingMode#HALF_UP}) should be used instead.
6464
*
6565
* <p>When a {@code MathContext} object is supplied with a precision
6666
* setting of 0 (for example, {@link MathContext#UNLIMITED}),
@@ -103,8 +103,7 @@
103103
* the exact result has more digits (perhaps infinitely many in the
104104
* case of division and square root) than the number of digits returned.
105105
*
106-
* First, the
107-
* total number of digits to return is specified by the
106+
* First, the total number of digits to return is specified by the
108107
* {@code MathContext}'s {@code precision} setting; this determines
109108
* the result's <i>precision</i>. The digit count starts from the
110109
* leftmost nonzero digit of the exact result. The rounding mode
@@ -194,6 +193,11 @@
194193
* {@code BigDecimal} created from the operand by moving the decimal
195194
* point a specified distance in the specified direction.
196195
*
196+
* <p>As a 32-bit integer, the set of values for the scale is large,
197+
* but bounded. If the scale of a result would exceed the range of a
198+
* 32-bit integer, either by overflow or underflow, the operation may
199+
* throw an {@code ArithmeticException}.
200+
*
197201
* <p>For the sake of brevity and clarity, pseudo-code is used
198202
* throughout the descriptions of {@code BigDecimal} methods. The
199203
* pseudo-code expression {@code (i + j)} is shorthand for "a
@@ -208,7 +212,6 @@
208212
* {@code BigDecimal} value; for example [19, 2] is the
209213
* {@code BigDecimal} numerically equal to 0.19 having a scale of 2.
210214
*
211-
*
212215
* <p>All methods and constructors for this class throw
213216
* {@code NullPointerException} when passed a {@code null} object
214217
* reference for any input parameter.

0 commit comments

Comments
 (0)