Я хочу суммировать мои чистые и валовые цены, поступающие из базы данных.
В базе данных 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());
}
}
Чего мне не хватает? Спасибо!
EDIT:
Я изменил свой код, но я все еще получаю то же исключение из строки "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());
}
}