Мне кажется, что проблема здесь не в том, чтобы отбросить первоначальную цену, а в том, чтобы отбросить ценную информацию путем усечения дробных значений до двух десятичных знаков.Если бы вы сохранили еще одно десятичное число, у вас не возникло бы этой проблемы.
Вот пример, в котором сохраняются 6 знаков точности, чтобы обеспечить достаточную точность для сотен операций над значениями, для которых в конечном итоге мне нужны только двазначащие десятичные знаки.У вас никогда не возникнет проблем с округлением до 6 знаков после запятой, если в конце вы заботитесь только о двух местах.
Этот код сохраняет 6 знаков, кроме случаев, когда вы печатаете цену за один день, после чего он округляется до двух знаков.
final BigDecimal price = BigDecimal.valueOf(215).setScale(6, BigDecimal.ROUND_HALF_EVEN);
final BigDecimal daysOfThisReservation = BigDecimal.valueOf(3).setScale(6, BigDecimal.ROUND_HALF_EVEN);
final BigDecimal dayPrice = price.divide(daysOfThisReservation, BigDecimal.ROUND_HALF_EVEN).setScale(6, BigDecimal.ROUND_HALF_EVEN);
System.out.println(dayPrice.setScale(2, BigDecimal.ROUND_HALF_EVEN));
System.out.println(dayPrice.multiply(daysOfThisReservation).setScale(2, BigDecimal.ROUND_HALF_EVEN)); //215.01
Результат:
71.67
215.00