0 votes
1 view
in Java by (4.1k points)

Why does the following code raise the exception shown below?

BigDecimal a = new BigDecimal("1.6");

BigDecimal b = new BigDecimal("9.2");

a.divide(b) // results in the following exception.


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

1 Answer

0 votes
by (46.1k points)

Here's are some lines mentioned in Java docs:

When a MathContext object is supplied with a precision setting of 0 (for example, MathContext.UNLIMITED), arithmetic operations are exact, as are the arithmetic methods which take no MathContext object. (This is the only behavior that was supported in releases before 5.)

As a corollary of computing the exact result, the rounding mode setting of a MathContext object with a precision setting of 0 is not used and thus irrelevant. In the case of the divide, the exact quotient could have an infinitely long decimal expansion; for example, 1 divided by 3.

If the quotient has a nonterminating decimal expansion and the operation is specified to return an exact result, an ArithmeticException is thrown. Otherwise, the exact result of the division is returned, as done for other operations.

To solve this, you need to try something like this:

a.divide(b, 2, RoundingMode.HALF_UP)

where 2 is precision and RoundingMode.HALF_UP is rounding mode

For more details click here.

Related questions

0 votes
1 answer
0 votes
1 answer
0 votes
1 answer
Welcome to Intellipaat Community. Get your technical queries answered by top developers !