购物篮四舍五入

Shopping basket rounding

我正在尝试找到计算篮子价格和总计的最佳方法。 所有产品价格均由带 2 位小数的数字表示,但是,当将折扣添加到 50% 的购物篮时,例如 37.27 美元的价格最终会变成带 3 位小数的 18.635 美元。现在我希望计算准确,但舍入 3 位小数并不总能给出预期的结果。

场景

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

给我们一共 5.98

当我添加 50% 的全球折扣时 - 将以上数字合计,这将给我 7.99。现在,如果我不必在应用折扣后获取每件商品的数字,这会很好用——当我想将商品传递到 PayPal Express Checkout 时就是这种情况。请求将失败,除非总数等于购物篮中所有项目的总数。

以上数字除以2(50%)后为:

得到的总数与我们将总数除以 2 时的总数完全相同。 问题是我不想在我的篮子里有 3 个小数,所以四舍五入结果变成:

加起来等于 8,乘以 2 后得到的数字与我们最初在购物篮中没有应用折扣的数字不同。

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

您可以使用 bcmul(),它将确保您的数字准确无误。

当你想确保价格总是有两位小数时,你可以使用number_format()

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

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

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

原因:某个时候有人会需要为每种产品收取的明确金额。并考虑 returns。如果您不必纠正 .01 的差异,它将使 returns 变得容易得多。