购物篮四舍五入
Shopping basket rounding
我正在尝试找到计算篮子价格和总计的最佳方法。
所有产品价格均由带 2 位小数的数字表示,但是,当将折扣添加到 50% 的购物篮时,例如 37.27 美元的价格最终会变成带 3 位小数的 18.635 美元。现在我希望计算准确,但舍入 3 位小数并不总能给出预期的结果。
场景
我的购物篮中有 5 件产品,原价如下:
- 80.00 美元
- 189.62 美元
- 37.27 美元
- 43.75 美元
- 105.34 美元
给我们一共 5.98
当我添加 50% 的全球折扣时 - 将以上数字合计,这将给我 7.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 美元
加起来等于 8
,乘以 2 后得到的数字与我们最初在购物篮中没有应用折扣的数字不同。
解决此类情况的最佳方法是什么?
您可以使用 bcmul()
,它将确保您的数字准确无误。
当你想确保价格总是有两位小数时,你可以使用number_format()
。
这是一个很好的问题。我的投票是对每件商品应用 50% 的折扣——将该数字以数字格式四舍五入到小数点后 2 位——并将该数字保存为购物车订单记录的一部分,即使你没有向客户展示。然后像往常一样将这些数字相加以获得购物车产品总数。
原因:某个时候有人会需要为每种产品收取的明确金额。并考虑 returns。如果您不必纠正 .01 的差异,它将使 returns 变得容易得多。
我正在尝试找到计算篮子价格和总计的最佳方法。 所有产品价格均由带 2 位小数的数字表示,但是,当将折扣添加到 50% 的购物篮时,例如 37.27 美元的价格最终会变成带 3 位小数的 18.635 美元。现在我希望计算准确,但舍入 3 位小数并不总能给出预期的结果。
场景
我的购物篮中有 5 件产品,原价如下:
- 80.00 美元
- 189.62 美元
- 37.27 美元
- 43.75 美元
- 105.34 美元
给我们一共 5.98
当我添加 50% 的全球折扣时 - 将以上数字合计,这将给我 7.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 美元
加起来等于 8
,乘以 2 后得到的数字与我们最初在购物篮中没有应用折扣的数字不同。
解决此类情况的最佳方法是什么?
您可以使用 bcmul()
,它将确保您的数字准确无误。
当你想确保价格总是有两位小数时,你可以使用number_format()
。
这是一个很好的问题。我的投票是对每件商品应用 50% 的折扣——将该数字以数字格式四舍五入到小数点后 2 位——并将该数字保存为购物车订单记录的一部分,即使你没有向客户展示。然后像往常一样将这些数字相加以获得购物车产品总数。
原因:某个时候有人会需要为每种产品收取的明确金额。并考虑 returns。如果您不必纠正 .01 的差异,它将使 returns 变得容易得多。