我以前使用过 BigDecimals 但不是很频繁,今天早上我正在做一些事情,我不断收到以下异常:
Exception in thread "main" java.lang.ArithmeticException: Non-terminating decimal expansion;
no exact representable decimal result.
at java.math.BigDecimal.divide(BigDecimal.java:1594)
我试图设置比例并使用舍入来消除这样的问题:
BigDecimal bd1 = new BigDecimal(1131).setScale(2,BigDecimal.ROUND_HALF_UP);
BigDecimal bd2 = new BigDecimal(365).setScale(2,BigDecimal.ROUND_HALF_UP);
BigDecimal bd3 = bd1.divide(bd2).setScale(2,BigDecimal.ROUND_HALF_UP);
System.out.println("result: " + bd3);
但是,我不断收到相同的异常。任何人都可以告诉我我在哪里犯了错误?
原文由 ChadNC 发布,翻译遵循 CC BY-SA 4.0 许可协议
非终止小数需要四舍五入
使用
divide
时,您应该使用MathContext
和RoundingMode
以防精确结果有无限小数位数。你的情况是这样的:
或者使用舍入模式调用
divide
以使用分子的比例(以下示例中的bd1
):