Я столкнулся с проблемой при попытке округлить десятичные разряды числа до ближайшей сотой тысячной цифры.
Пример:
BigDecimal num1 = BigDecimal.valueOf(0.38871551);
MathContext mc = new MathContext(5);
System.out.println(num1.round(mc));
Вывод 0.38872
что и ожидается.Пока все хорошо.Давайте возьмем другой пример:
BigDecimal num1 = BigDecimal.valueOf(1.1680418);
MathContext mc = new MathContext(5);
System.out.println(num1.round(mc));
Вывод 1.1680
.Здесь проблема возникает.То, что я хочу, это вывод 1.16804
, но округление, кажется, съедает 4
вместо того, чтобы оставить все как есть.
Я пробовал разные режимы округления, но вот что я получаю:
RoundMode.UP
дает 1.1681
RoundingMode.HALF_UP
или RoundingMode.HALF_DOWN
дает 1.1680
и т. Д.
Как получитьжелаемый результат:
0.38871551
должно округляться до 0.38872
1.1680418
должно округляться до 1.16804
0.55052984
должно округляться до 0.55053
Я даже пытался округлить до 6-го знака после запятой вместо 5-го, но я не могу найти правильную комбинацию, которая дает мне желаемый результат, как показано выше.