计算价格连续折扣的最合适方法是什么?
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
。它大约只有一半的精度,这可能会导致一些非常糟糕的结果。
示例:
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
。它大约只有一半的精度,这可能会导致一些非常糟糕的结果。