在Java中四舍五入至最接近0.05的最佳方法
请考虑对除食品之外的所有商品加收10%的税。此外,进口商品还需支付5%的附加税。
如果音乐CD的成本是12.49。该项目的税将是1.499。如果进口一瓶香水的价格为47.50,则该商品的税费为7.125
有一项政策规定应将某项商品的税额四舍五入至最接近的0.05。因此,应将1.499舍入为1.5,并将7.125舍入为7.25。
以上舍入要求可以使用以下逻辑实现:
(float) Math.ceil(taxAmount / 0.05f) * 0.05f;
将税项加到商品成本中,得出:
音乐CD:12.49 + 1.5 = 13.99盒进口巧克力:47.50 + 7.25 = 54.65。
我遇到以下输入问题:
如果进口一盒巧克力的价格为11.85,则税为0.5925
使用四舍五入策略,四舍五入后的税率为0.6。
当我们添加均为浮点数的11.85 + 0.6时,结果为12.450001。与其他输入不同,此特定输入给出许多小数位,而不是其他输出中的2个小数位。
我尝试使用BigDecimal而不是float来存储标度设置为2个小数位的所有值。这种方法的问题在于,如果未指定舍入策略,则在某些情况下bigDecimal将引发异常。为BigDecimal提供舍入策略会导致使用使用提供给BigDecimal的舍入策略对项目成本和适用税款的总和进行舍入,从而更改所需的输出。
回答:
您可以使用long
而不是double
使用double来做
double d = Math.round(d * 20) / 20.0; // round up to multiple of 0.05
使用多长时间(以美分计)
long l = (l + 3) / 5 * 5;
尽管它通常被认为是最佳使用习惯int
,long
或者BigDecimal
大多数投资银行和基金都使用它,double
因为一旦您了解了如何安全地使用它们,它们的使用就比使用长(比长)和快(比BigDecimal)要好。
以上是 在Java中四舍五入至最接近0.05的最佳方法 的全部内容, 来源链接: utcz.com/qa/428867.html