php圆适合购物车总数?

时间:2012-10-18 11:14:05

标签: php floating-point shopping-cart rounding

我正在使用此

$grandtotal = round ($grandtotal, 2);

从购物车中回复我计算的格兰特,如果没有它,我会得到这样的东西:

27.999999997由于价格的小数。

问题,

我可以指望在0.000000区域内某处浮点不准确吗?

如果它总是这样一个小数字舍入不应该是一个问题,并且总是返回正确的总权利?

或者我需要更复杂的方法吗?

我正在进行的商店将是一种食品交付,并且预计人们不会订购数千种商品,因此0.00000002的不准确性会累积到0.1。

3 个答案:

答案 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中。