Jack Parker Jack Parker - 1 year ago 65
Java Question

Why Am I Getting a Non-terminating decimal expansion when I am rounding up already?

OK, so I'm trying to divide 2 random BigDecimal values. If the number is uneven or irregular rather than get the remainder, I would prefer to round it up to the nearest whole number. However, when I do this my website crashes and I get the following error.

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

I would understand this happening if I hadn't been already rounding the digits, but because I am, I don't understand why this is happening.

BigDecimal cartQty= (testValue1).getQuantity().getValue();
BigDecimal cartMultiplier = (testValue2).getQuantity().getValue();
//below where it crashes so if 4/3 and the value is 1.333 I'd expect to get 2.
BigDecimal TotalPackageInt= cartQty.divide(cartMultiplier ).setScale(0, RoundingMode.UP);

Answer Source

Tell BigDecimal how you want to round when you do the divide. Like this:

BigDecimal TotalPackageInt=  cartQty.divide(cartMultiplier, 0, RoundingMode.UP );
Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download