我正在使用此
$grandtotal = round ($grandtotal, 2);
从购物车中回复我计算的格兰特,如果没有它,我会得到这样的东西:
27.999999997由于价格的小数。
问题,
我可以指望在0.000000区域内某处浮点不准确吗?
如果它总是这样一个小数字舍入不应该是一个问题,并且总是返回正确的总权利?
或者我需要更复杂的方法吗?
我正在进行的商店将是一种食品交付,并且预计人们不会订购数千种商品,因此0.00000002的不准确性会累积到0.1。
答案 0 :(得分:1)
如果在整个计算过程中使用圆函数,则应该没有问题。
我在php中编写了一些会计资料,并且使用了该函数没有太大问题 但一定要检查一些好的旧纸和铅笔计算的结果。 :)
答案 1 :(得分:1)
我们不使用回合
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英镑。
答案 2 :(得分:1)
round
并不适合,但您的数据类型不合适。 PHP's floating point numbers不适合您在问题中拥有的金钱价值。所以你没有使用合适的类型。
而是使用专用的金钱类型。默认情况下,AFAIK在PHP中不存在,您可以在各个位置找到它描述的模式,例如在P of EAA Catalog | Money中。