如何将钱四舍五入到最接近的美分?

问题描述

所以我正在创建一个小费计算器应用程序,但我正在努力四舍五入到最接近的美分;这是我想出的一些随机边缘情况

$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

解决方法

假设您了解浮点数的特征以及它在货币计算中的缺点,是这样的吗?

double amount = Math.ceil(value * 100.0) / 100.0;