Понимать математические операции, используя BigDecimal в Java - PullRequest
0 голосов
/ 29 марта 2020

Использование Java (JDK 1.8.0_66 и JDK 1.8.0_181) и его встроенного класса BigDecimal при выполнении следующих операций:

    BigDecimal res = new BigDecimal("290");
    BigDecimal sub = new BigDecimal("22");
    sub = sub.subtract(new BigDecimal("7"));
    sub = sub.subtract(new BigDecimal("4"));
    res = res.divide(new BigDecimal("22"), 2, RoundingMode.HALF_EVEN);
    res = res.multiply(sub);
    res = res.setScale(2, RoundingMode.HALF_EVEN);

дает результат 144,98 при ожидаемом значении 145.

Почему это происходит? Я пробовал локальный и онлайн-компилятор. Установка масштаба происходит слишком поздно? И как я могу получить более точный расчет?

Эта формула используется для представления расчетов денежной стоимости.

1 Ответ

2 голосов
/ 29 марта 2020

Правильный ответ - 144,98. Вы вычисляете 290/22 с точностью до двух знаков после запятой. Результат 13,18. И 13,18 * 11 - это 144,98

Если вы рассчитываете, что «если бы я заплатил 145 долларов равными 11 частями, насколько крупными должны быть платежи», вам нужно было бы взять разницу в 2 цента и добавить их к рассрочка.

...