我想总结一下我从数据库中得到的净价格和总价格。在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());
}
}发布于 2021-11-09 15:02:15
试着把逗号移到右边。因此:
long value = new BigDecimal(4.13).movePointRight(2).longValueExact();转换后的值为413。
https://stackoverflow.com/questions/54349671
复制相似问题