В Java для округлення розрахунків з грошима до двох десяткових знаків використовують клас BigDecimal. Але як вибрати найкращий метод округлення? Давайте розглянемо це питання.
Припустимо, що у нас є BigDecimal amount і ще один BigDecimal tax. Ми хочемо виконати наступний розрахунок: amountWithoutTax = amount – tax. amount і tax повинні бути в форматі YYYY.XX (тобто з точністю 2 десяткових знаків). Це означає, що amountWithoutTax також повинен мати точність 2. Однак, в надзвичайному випадку amount або tax мають точність 3 або більше, amountWithoutTax також буде мати точність 3 або більше.
Який варіант є найбільш відповідним з точки зору округлення? Коли йдеться про гроші, $45.134 не має сенсу, оскільки немає монет з меншою вартістю, ніж цент.
Ось варіанти, які ми маємо за допомогою класу RoundingMode:
1 |
CEILING, DOWN, FLOOR, HALF_DOWN, HALF_EVEN, HALF_UP, UP |
На даний момент ми використовуємо CEILING, тобто просте округлення вгору. Але, як чесно визнати, я просто випадково вибрав цей варіант. Як я можу знати, який є офіційний або правильний спосіб робити це?