请考虑对除食品以外的所有商品征收 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 这两个 float 相加时,我们得到的结果为 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
因为一旦您了解了如何安全地使用它们,它们使用起来就会更简单(比 long )更快(比 BigDecimal)。
关于java - 在 Java 中四舍五入到最接近的 0.05 的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11815135/