购物篮四舍五入

时间:2015-12-10 16:08:46

标签: php floating-point decimal e-commerce

我正在努力寻找计算篮子价格和总数的最佳方法。 所有产品价格均以2位小数点数表示,但是,如果将折扣添加到50%的篮子中,则以37.27美元为例,最终得出的数字为18.635美元,小数点后3位。现在我希望计算结果准确,但是舍入3位小数并不能总是得到预期的结果。

方案

我的购物篮中有5件商品,原价如下:

  • $ 80.00
  • $ 189.62
  • $ 37.27
  • $ 43.75
  • $ 105.34

给我们总计$455.98

当我添加50%的全球折扣时 - 取上面的总数,这会给我$227.99。现在,如果我不必在应用折扣后获得每个项目的数字,这将工作正常 - 当我想将项目传递给PayPal Express Checkout时就是这种情况。除非总数等于购物篮中所有商品的总数,否则请求将失败。

将每个除以2(50%)后的上述数字为:

  • $ 40.00
  • $ 94.81
  • $ 18.635
  • $ 21.875
  • $ 52.67

给予我们与总数除以2时完全相同的总数。 问题是我不想在我的购物篮中输入3位小数,因此将结果四舍五入为:

  • $ 40.00
  • $ 94.81
  • $ 18.64
  • $ 21.88
  • $ 52.67

加起来为$228,当乘以2时,我们得到的数字与我们最初在篮子中的数字不同而没有应用折扣。

解决此类情景的最佳方法是什么?

2 个答案:

答案 0 :(得分:1)

这是一个很好的问题。我的投票是对每个项目应用50%的折扣 - 将该数字四舍五入到数字格式的2位小数 - 并将该数字保存为购物车订单记录的一部分,即使您没有向客户展示。然后像往常一样添加这些数字以获得购物车产品总数。

原因:在某些时候某人需要为每种产品收取明确的金额。并考虑回报。如果你不必纠正.01差异,那么它将使回报变得更加容易。

答案 1 :(得分:0)

您可以使用bcmul(),确保您的号码准确无误。

如果您想确保价格总是有两位小数,可以使用number_format()

http://php.net/manual/en/function.bcmul.php

http://php.net/manual/en/function.number-format.php