Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

8264161: BigDecimal#stripTrailingZeros can throw undocumented ArithmeticException #3204

Closed
wants to merge 2 commits into from
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
27 changes: 15 additions & 12 deletions src/java.base/share/classes/java/math/BigDecimal.java
Expand Up @@ -52,15 +52,15 @@
*
* <p>The {@code BigDecimal} class gives its user complete control
* over rounding behavior. If no rounding mode is specified and the
* exact result cannot be represented, an exception is thrown;
* otherwise, calculations can be carried out to a chosen precision
* and rounding mode by supplying an appropriate {@link MathContext}
* object to the operation. In either case, eight <em>rounding
* modes</em> are provided for the control of rounding. Using the
* integer fields in this class (such as {@link #ROUND_HALF_UP}) to
* represent rounding mode is deprecated; the enumeration values
* of the {@code RoundingMode} {@code enum}, (such as {@link
* RoundingMode#HALF_UP}) should be used instead.
* exact result cannot be represented, an {@code ArithmeticException}
* is thrown; otherwise, calculations can be carried out to a chosen
* precision and rounding mode by supplying an appropriate {@link
* MathContext} object to the operation. In either case, eight
* <em>rounding modes</em> are provided for the control of rounding.
* Using the integer fields in this class (such as {@link
* #ROUND_HALF_UP}) to represent rounding mode is deprecated; the
* enumeration values of the {@code RoundingMode} {@code enum}, (such
* as {@link RoundingMode#HALF_UP}) should be used instead.
*
* <p>When a {@code MathContext} object is supplied with a precision
* setting of 0 (for example, {@link MathContext#UNLIMITED}),
Expand Down Expand Up @@ -103,8 +103,7 @@
* the exact result has more digits (perhaps infinitely many in the
* case of division and square root) than the number of digits returned.
*
* First, the
* total number of digits to return is specified by the
* First, the total number of digits to return is specified by the
* {@code MathContext}'s {@code precision} setting; this determines
* the result's <i>precision</i>. The digit count starts from the
* leftmost nonzero digit of the exact result. The rounding mode
Expand Down Expand Up @@ -194,6 +193,11 @@
* {@code BigDecimal} created from the operand by moving the decimal
* point a specified distance in the specified direction.
*
* <p>As a 32-bit integer, the set of values for the scale is large,
* but bounded. If the scale of a result would exceed the range of a
* 32-bit integer, either by overflow or underflow, the operation may
* throw an {@code ArithmeticException}.
*
* <p>For the sake of brevity and clarity, pseudo-code is used
* throughout the descriptions of {@code BigDecimal} methods. The
* pseudo-code expression {@code (i + j)} is shorthand for "a
Expand All @@ -208,7 +212,6 @@
* {@code BigDecimal} value; for example [19, 2] is the
* {@code BigDecimal} numerically equal to 0.19 having a scale of 2.
*
*
* <p>All methods and constructors for this class throw
* {@code NullPointerException} when passed a {@code null} object
* reference for any input parameter.
Expand Down