ArithmeticException for BigInteger

The BigInteger class represents arbitrary-precision integers and does not support fractional or decimal values. Therefore, RoundingMode.HALF_UP and other rounding modes are not applicable to BigInteger operations directly.

However, you may still encounter an ArithmeticException in certain cases when converting or dividing with expectations of exact results, especially when the operation would require rounding, something BigInteger cannot perform.

Why ArithmeticException Occurs

  • BigInteger is for whole numbers only ,no decimals or fractions.
  • If you try to perform division that does not yield an exact integer, and you use a method like divide() which expects exact division, it throws an ArithmeticException.

Common Scenario

import java.math.BigInteger;

public class BigIntegerDivisionExample {
    public static void main(String[] args) {
        BigInteger a = new BigInteger("10");
        BigInteger b = new BigInteger("3");

        // This throws ArithmeticException because 10 is not evenly divisible by 3
        BigInteger result = a.divide(b);
        System.out.println(result);
    }
}
/*
Exception in thread "main" java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.
*/

How to Avoid This in BigInteger

Use divideAndRemainder() or divide() safely when exact division is not guaranteed:

BigInteger a = new BigInteger("10");
BigInteger b = new BigInteger("3");

BigInteger[] result = a.divideAndRemainder(b);
System.out.println("Quotient: " + result[0]);
System.out.println("Remainder: " + result[1]);

//Output
Quotient: 3
Remainder: 1Code language: JavaScript (javascript)

BigInteger does not support decimal precision or rounding like HALF_UP.ArithmeticException may occur when an operation assumes exact division but the result is fractional.Use BigDecimal instead if you need precision control and rounding modes such as HALF_UP.

Scroll to Top