auditReportConfirmVO.setCutRatio(auditReportConfirmVO.getCutMoney().multiply(hundred).divide(auditReportConfirm.getSubmitMoney(), 2, BigDecimal.ROUND_HALF_UP));算术异常,帮我优化一下
时间: 2024-03-05 18:53:10 浏览: 157
BigDecimal.js.zip
这段代码可能会抛出 `java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.` 异常,主要是因为在进行除法操作时,可能会出现无限循环小数,而 `BigDecimal` 类默认的精度是 16 位,不足以表示无限循环小数,因此需要手动设置精度。
可以将这段代码修改为以下形式,使用 `BigDecimal` 的字符串构造函数设置精度:
```
BigDecimal cutRatio = auditReportConfirmVO.getCutMoney().multiply(hundred)
.divide(auditReportConfirm.getSubmitMoney(), 4, RoundingMode.HALF_UP);
auditReportConfirmVO.setCutRatio(cutRatio);
```
其中,第三个参数 `4` 表示精度为 4 位,第四个参数 `RoundingMode.HALF_UP` 表示四舍五入。你也可以根据实际需求,调整精度和舍入模式。
阅读全文