Округление необходимого исключения после установки масштаба и округления для BigDecimal - PullRequest
0 голосов
/ 24 января 2019

Я хочу суммировать мои чистые и валовые цены, поступающие из базы данных. В базе данных 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());
    }
}
...