Как округлить деньги до цента?

Итак, я создаю приложение для калькулятора чаевых, но я изо всех сил пытаюсь округлить его до ближайшего цента; вот несколько случайных крайних случаев, которые я придумал

$1.243 => $1.25 
$4.44134242 => $4.45
$5.5675235235 => $5.57
$1.21 => $1.21
$1.2000 => $1.20
$1.20001 => $1.21

По сути, я смотрю на сотый разряд, и если после этого десятичного знака есть какое-либо число больше 0, я округляю его до ближайшего цента. Ниже то, что я придумал, но иногда я ошибаюсь на цент

double value = 123.451;
double amount = (int)(value * 100.0) / 100.0;
// Should return 123.46

person Eliteness CA    schedule 08.02.2021    source источник
comment
Я не понимаю, почему 1,243 округляется до 1,24, а не до 1,25, учитывая ваше описание того, что вы хотите.   -  person tgdavies    schedule 08.02.2021
comment
Лучше использовать java.math.BigDecimal для денежных расчетов. Подробнее здесь stackoverflow.com/a/9959347/2224047.   -  person Nikolai Shevchenko    schedule 08.02.2021
comment
В заголовке вы говорите ближайшие 2 цента, но остальная часть вопроса просто говорит об округлении до следующего цента. Каково фактическое требование?   -  person Henry    schedule 08.02.2021
comment
Да, это была опечатка. 1,243 доллара следует округлить до 1,25 доллара (обновлено), я имел в виду 2 знака после запятой. По сути, если бы вы и кто-то еще делили счет, и гипотетически, если бы вы делили его поровну, вы и ваш друг дали бы 1,25 доллара вместо какого-то большого странного десятичного числа.   -  person Eliteness CA    schedule 08.02.2021


Ответы (1)


Предполагая, что вы понимаете характеристики чисел с плавающей запятой и недостатки, которые они имеют для денежных расчетов, что-то вроде этого?

double amount = Math.ceil(value * 100.0) / 100.0;
person Henry    schedule 08.02.2021