Я пытаюсь понять, как округлить денежную сумму вверх до ближайших 5 центов. Ниже показаны мои ожидаемые результаты
1.03 => 1.05
1.051 => 1.10
1.05 => 1.05
1.900001 => 1.10
Мне нужно, чтобы результат имел точность 2 (как показано выше).
Обновлять
Следуя приведенным ниже советам, лучшее, что я мог сделать, это
BigDecimal amount = new BigDecimal(990.49)
// To round to the nearest .05, multiply by 20, round to the nearest integer, then divide by 20
def result = new BigDecimal(Math.ceil(amount.doubleValue() * 20) / 20)
result.setScale(2, RoundingMode.HALF_UP)
Я не уверен, что это на 100% кошерно - я обеспокоен тем, что точность может быть потеряна при преобразовании в двойные числа и обратно. Тем не менее, это лучшее из того, что я придумал, и похоже работает.
BigDecimal
без использованияdoubleValue()
. - person robinst   schedule 16.05.2013