我正在尝试做一些数学计算,以便在我的商店结账时使用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个。
我的上面的卡有什么明显的错误
答案 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']);
}