好的,所以我试图划分2个随机BigDecimal值 . 如果数字不均匀或不规则而不是得到余数,我宁愿将它四舍五入到最接近的整数 . 但是,当我这样做时,我的网站崩溃,我得到以下错误 .
引起:java.lang.ArithmeticException:非终止十进制扩展;没有确切的可表示的小数结果 .
如果我没有将数字四舍五入,我会理解这种情况,但因为我,我不明白为什么会发生这种情况 .
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);
2 回答
告诉
BigDecimal
当你执行divide
时你想要如何舍入 . 像这样:您了解操作的意图并不会改变实际Java方法链的语义 .
您的语句以
cartQty
开头,然后调用divide(cartMultiplier)
. 只有在返回后才会调用setScale(0, RoundingMode.UP)
的结果 . 如果该部门抛出异常,那么您计划稍后执行的操作无关紧要 .鉴于这些是数量,您可以考虑使用
BigInteger
而不是BigDecimal
.