Режим округления от java Математический пакет для .555 не работает - PullRequest
0 голосов
/ 05 марта 2020

Как насчет моей проблемы в следующем, я использую режим округления для округления и усечения некоторых количеств, но ни одно из перечислений не работает для бизнес-правила, в котором нуждается мой клиент, я приведу в качестве примера следующее:

new BigDecimal(5.551).setScale(2, RoundingMode.[ENUM]) <-- DEberia regresar 5.55 OK
new BigDecimal(5.554).setScale(2, RoundingMode.[ENUM]) <-- DEberia regresar 5.55 OK
new BigDecimal(5.555).setScale(2, RoundingMode.[ENUM]) <-- DEberia regresar 5.55 It should be 5.56 
new BigDecimal(5.559).setScale(2, RoundingMode.[ENUM]) <-- DEberia regresar 5.56 OK

Я использовал HALF_DOWN, который был самым близким, но я столкнулся с этим случаем, в котором у меня чистая пятерка, и он больше не работал.

1 Ответ

1 голос
/ 05 марта 2020

Сделайте это следующим образом:

import java.math.BigDecimal;
import java.math.RoundingMode;

public class Main {
    public static void main(String[] args) {

        System.out.println(new BigDecimal(String.valueOf(5.551)).setScale(2, RoundingMode.HALF_UP));
        System.out.println(new BigDecimal(String.valueOf(5.554)).setScale(2, RoundingMode.HALF_UP));
        System.out.println(new BigDecimal(String.valueOf(5.555)).setScale(2, RoundingMode.HALF_UP));
        System.out.println(new BigDecimal(String.valueOf(5.559)).setScale(2, RoundingMode.HALF_UP));
    }
}

Вывод:

5.55
5.55
5.56
5.56
...