【发布时间】:2015-12-10 16:08:45
【问题描述】:
我正在尝试找到计算篮子价格和总数的最佳方法。 所有产品价格均由带 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 时就是这种情况。除非 total 等于篮子中所有项目的总和,否则请求将失败。
以上各除以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 位小数时,这并不总是一种选择。
-
回答更广泛的问题:要么计算第二种方式折扣后的价格,然后将其显示给客户
"Total after discount: $288.00"要么只是向贝宝发送一个带有 orderid 和相关成本的对象 - 没有具体需要详细说明每个产品 -
我假设有一个协议来描述必须如何处理这些事情。如果您必须单独计算每个折扣,请执行此操作,然后对 dicsounted 值求和。否则,计算总和。
-
@Steve - 我最初就是这么想的,但我认为客户在 PayPals 门户网站上看到他们实际同意购买的东西可能会很好。
标签: php floating-point decimal e-commerce