PHP数学计算没有给出正确的结果

时间:2016-05-27 10:14:05

标签: php math

我正在尝试做一些数学计算,以便在我的商店结账时使用php中的免费项目。

这是我的代码:

$bugofq = $cart_item['quantity'] * get_free_quantity($cart_item['product_id']);

$deal['freequantity'] = 10;
$deal['itemquantity'] = 5;

if($deal['freequantity'] >= 1 && $deal['itemquantity'] >= 1 && $cart_item['quantity'] > $deal['itemquantity']){
  $bugofq = $cart_item['quantity'] + $deal['freequantity']; 
}

所以基本上我在查询我的数据库,看看是否存在某种产品。如果确实如此,我会检查是否有任何优惠适用。

以上示例提供“购买5件产品,免费获赠10件”。

我上面的if语句正确计算了这个,所以总产品就是15。

但是,如果我将10个产品添加到我的购物车中,我应该最终得到30个产品(5 + 10 + 5 + 10 = 30),但我最终得到20.如果我添加任何金额,也会发生这种情况5.如果我将20个产品添加到我的购物车中,我预计会看到60个,原始的20个和40个免费,Bu ti最终会有30个。

我的上面的卡有什么明显的错误

2 个答案:

答案 0 :(得分:0)

在所有描述的情况下,if语句条件的计算结果为true,因此代码$bugofq = $cart_item['quantity'] + $deal['freequantity'];正在运行,因此它只将$deal['freequantity']的值添加到$cart_item['quantity']一次,即你的情况总是会增加10的值,这就是为什么5你得到15,10你得到20而不是30,20你得到30而不是60.

为了正确计算,您应该计算乘数$c= floor($cart_item['quantity'] / $deal['itemquantity'])$c显示应该应用免费项目包的次数,因此结果为$bugofq = $cart_item['quantity'] + ( $c * $deal['freequantity']);

答案 1 :(得分:0)

您只计算一次免费计数的公式。要正确执行此操作,您需要查看应该应用多少次添加。您可以使用以下代码:

$bugofq = $cart_item['quantity']; // default case
if($deal['itemquantity'] >= 1){ // deal present
    $bugofq += $deal['freequantity'] *
            intdiv($cart_item['quantity'], $deal['itemquantity']); 
}