示例:
价格: 100 $ |折扣: 10% |连续折扣: 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
这似乎是正确的,但这是一个非常古老的问题,我可能会重新发明轮子,所以我想知道是否有更好的方法来做到这一点。更好的是指一种提高可读性,效率和/或准确性的方法。
答案 0 :(得分:0)
基本上,这是做到这一点的方法。你可能不应该使用float
。
来自the specs:
对于您提供的示例,此数据类型不应用于精确值,例如 货币。为此,您需要使用java.math.BigDecimal 而不是。
BigDecimal
可能有点过分,但对于较大的货币值,double
会快速崩溃,float
会更快崩溃。
还有一件事:一般情况下,除非您特别想节省空间,否则永远不要使用float
。它大约是精确度的一半,可能导致一些非常糟糕的结果。