Home > Java > javaTutorial > body text

Why Does `BigDecimal` Division Throw an `ArithmeticException` for Non-Terminating Decimals?

Barbara Streisand
Release: 2024-11-12 14:02:01
Original
909 people have browsed it

Why Does `BigDecimal` Division Throw an `ArithmeticException` for Non-Terminating Decimals?

Diving into the Depths of the ArithmeticException: Non-Terminating Division

The code snippet provided attempts to divide two BigDecimal objects (a and b). However, this operation results in the following exception:

java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.
Copy after login

To unravel this exception, we must delve into the intricate details of BigDecimal arithmetic.

The Essence of Exact Arithmetic

As stated in the Java 11 BigDecimal documentation, when the MathContext object's precision is set to 0 (e.g., MathContext.UNLIMITED), arithmetic operations (including the division without MathContext) yield exact results. This was the sole behavior in pre-5 releases.

Infinite Decimal Expansions and Exactness

As a consequence of computing exact results, the rounding mode setting of a MathContext object with precision 0 becomes irrelevant. For the divide operation, the quotient might have an infinite decimal expansion, such as 1 divided by 3.

Handling Non-Terminating Expansions

If the quotient has a non-terminating decimal expansion and the operation is required to return an exact result, an ArithmeticException is thrown. Conversely, the exact quotient is returned if the result is finite.

Solution for Non-Terminating Divisions

To rectify this issue, you can employ a method like this:

a.divide(b, 2, RoundingMode.HALF_UP)
Copy after login

Here, 2 represents the scale, and RoundingMode.HALF_UP specifies the rounding method.

Additional Resources

For an in-depth understanding, refer to the Java 11 BigDecimal documentation and this insightful blog post.

The above is the detailed content of Why Does `BigDecimal` Division Throw an `ArithmeticException` for Non-Terminating Decimals?. For more information, please follow other related articles on the PHP Chinese website!

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Articles by Author
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template