计算价格连续折扣的最合适方法是什么?

What is the most appropriate way to calculate the successive discount of a price?

示例:

Price: 100$ | Discount: 10% | Successive discount: 5%

连续折扣适用于折扣后的价格,所以我是这样做的:

float price = 100f;
float disc = 10f;
float sucDisc = 5f;
float finalPrice = (price * (1f - (disc / 100))) * (1f - (sucDisc / 100));
System.out.println(finalPrice);

输出:

85.5

这似乎是正确的,但这是一个非常老的问题,我可能正在重新发明轮子,所以我想知道是否有更好的方法来做到这一点。更好的意思是一种提高可读性、效率 and/or 准确性的方法。

基本上,这就是方法。不过,您可能不应该使用 float

来自the specs

This data type should never be used for precise values, such as currency. For that, you will need to use the java.math.BigDecimal class instead.

BigDecimal 对于您给出的示例可能有点矫枉过正,但对于大货币价值,double 会很快崩溃,float 会更快崩溃。

还有一件事:一般情况下,除非您特别想保存 space,否则永远不要使用 float。它大约只有一半的精度,这可能会导致一些非常糟糕的结果。