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

时间:2015-03-01 20:13:16

标签: java math

示例:

  

价格: 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

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

1 个答案:

答案 0 :(得分:0)

基本上,这是做到这一点的方法。你可能不应该使用float

来自the specs

  

此数据类型不应用于精确值,例如   货币。为此,您需要使用java.math.BigDecimal   而不是。

对于您提供的示例,

BigDecimal可能有点过分,但对于较大的货币值,double会快速崩溃,float会更快崩溃。

还有一件事:一般情况下,除非您特别想节省空间,否则永远不要使用float。它大约是精确度的一半,可能导致一些非常糟糕的结果。