И. Петров:
Я хочу, чтобы обогнуть значение BigDecimal до ближайшего целого числа.
Я пытался использованным раствором от этой проблемы Java BigDecimal: округление до ближайшего целого значения , но она не работает для меня.
BigDecimal scaled = value.setScale(0, RoundingMode.HALF_UP);
System.out.println(value + " -> " + scaled);
Он работает прямо в случае такой:
100.12 -> 100.00
100.44 -> 100.00
100.50 -> 101.00
100.75 -> 101.00
Но он не в случае
100.47 -> 100 instead of 101.
Почему этот код не работает?
user7294900:
Вы ожидаете , чтобы округлить число всегда, в вашем случае использования RoundingMode .up
HALF_UP завершат только .5
вверх
Режим Округление до круглого в сторону «ближайшего соседа», если оба соседи находятся на одинаковом расстоянии, в этом случае облавы.
Таблица показывает результаты этих операций округления:
Input Number UP DOWN CEILING FLOOR HALF_UP HALF_DOWN HALF_EVEN UNNECESSARY 5.5 6 5 6 5 6 5 6 throw ArithmeticException 2.5 3 2 3 2 3 2 2 throw ArithmeticException 1.6 2 1 2 1 2 2 2 throw ArithmeticException 1.1 2 1 2 1 1 1 1 throw ArithmeticException