我正在使用这个
$grandtotal = round ($grandtotal, 2);
从购物车中呼应我计算出的总计,因为没有它我会得到这样的东西:
27.999999997 由于价格中的小数。
问题,
我可以指望浮点误差总是在 0.000000 区域的某个地方吗?
如果总是这么小的数字四舍五入应该不是问题并且总是返回正确的总数吗?
还是我需要更复杂的方法?
我正在经营的商店将是一家送餐店,预计人们不会订购数千件商品,因此 0.00000002 的不准确性会累积到 0.1。
我正在使用这个
$grandtotal = round ($grandtotal, 2);
从购物车中呼应我计算出的总计,因为没有它我会得到这样的东西:
27.999999997 由于价格中的小数。
问题,
我可以指望浮点误差总是在 0.000000 区域的某个地方吗?
如果总是这么小的数字四舍五入应该不是问题并且总是返回正确的总数吗?
还是我需要更复杂的方法?
我正在经营的商店将是一家送餐店,预计人们不会订购数千件商品,因此 0.00000002 的不准确性会累积到 0.1。
如果您在整个计算过程中使用 round 函数,那么应该没有问题。
我在 php 中编写了一些会计资料,并且使用该函数没有什么大问题。
但一定要对照一些好的旧纸和铅笔计算来检查结果。:)
我们不使用圆形
number_format($amount, 2, ".",""); //as you want the amount to be as much closer to real 27.99
但如果你真的需要使用圆形:
echo round(9.0, 0, PHP_ROUND_HALF_UP); // 9
echo round(9.1, 0, PHP_ROUND_HALF_UP); // 9
echo round(9.2, 0, PHP_ROUND_HALF_UP); //9
echo round(9.3, 0, PHP_ROUND_HALF_UP); // 9
echo round(9.4, 0, PHP_ROUND_HALF_UP); // 9
echo round(9.5, 0, PHP_ROUND_HALF_UP); // 10
echo round(9.6, 0, PHP_ROUND_HALF_UP); // 10
echo round(9.7, 0, PHP_ROUND_HALF_UP); // 10
echo round(9.8, 0, PHP_ROUND_HALF_UP); // 10
echo round(9.9, 0, PHP_ROUND_HALF_UP); // 10
echo round(27.999999997, 0, PHP_ROUND_HALF_UP); //28
echo round(27.994444, 0, PHP_ROUND_HALF_UP); // 28
通过向上或向下舍入,您可能会损失很多钱。您的购物篮将有 10 件物品,成本为 1.4 英镑,如果您有 10000 件物品,您的损失将是 4 便士,损失将是 400 英镑。
不是round不适合,而是您的数据类型不适合。PHP 的浮点数不适合您在问题中的货币值。所以你没有使用合适的类型来完成这项工作。
而是使用专用货币类型。默认情况下,PHP 中不存在 AFAIK,您可以在各个地方找到它的模式描述,例如在EAA 目录的 P | | 钱。