我想总结一下来自数据库的净价和毛价。 这些数字在MySQL数据库中的存储方式如下:
decimal(38,3)
我已经阅读了有关Stackoverflow的相关问题,但仍然无法弄清楚为什么会出现此异常:
Caused by: java.lang.ArithmeticException: Rounding necessary
at java.math.BigDecimal.commonNeedIncrement(BigDecimal.java:4148)
at java.math.BigDecimal.needIncrement(BigDecimal.java:4204)
at java.math.BigDecimal.divideAndRound(BigDecimal.java:4112)
at java.math.BigDecimal.setScale(BigDecimal.java:2452)
at java.math.BigDecimal.longValueExact(BigDecimal.java:3090)
at java.math.BigDecimal.intValueExact(BigDecimal.java:3147)
对于此代码:
setSumNetPrice(0);
setSumGrossPrice(0);
for(MyReport report : result){
if(null != report.getNetPrice()){
BigDecimal netPrice = report.getNetPrice().setScale(2, RoundingMode.HALF_UP);
setSumNetPrice(getSumNetPrice() + netPrice.intValueExact());
}
if(null != report.getGrossMoney()){
BigDecimal grossMoney = report.getGrossMoney().setScale(2, RoundingMode.HALF_UP);
setSumGrossPrice(getSumGrossPrice() + report.getGrossMoney().intValueExact());
}
}
我想念什么?谢谢!
编辑:
我编辑了代码,但仍然从“ grossMoney.intValueExact()”行中得到了相同的异常...
for(MyReport report : result){
if(null != report.getNetPrice()){
BigDecimal netPrice = report.getNetPrice().setScale(2, RoundingMode.HALF_UP);
setSumNetPrice(getSumNetPrice() + netPrice.intValueExact());
}
if(null != report.getGrossMoney()){
BigDecimal grossMoney = report.getGrossMoney().setScale(2, RoundingMode.HALF_UP);
setSumGrossPrice(getSumGrossPrice() + grossMoney.intValueExact());
}
}