2016-05-27 3 views
0

Я пытаюсь сделать некоторые математики, чтобы выработать бесплатные предметы в php на мой магазин.расчеты php maths не дают правильных результатов

Вот мой код:

$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 бесплатных».

Мои, если вышеприведенное утверждение вычисляет это правильно, так что общие продукты затем 15.

Однако, если добавить 10 продуктов в мою корзину я должен закончить в общей сложности 30 позиций (5 + 10 + 5 + 10 = 30), но я заканчиваю с 20. Это также происходит, если я добавляю любое количество 5. Так что, если я добавлю 20 продуктов в свою корзину, я бы ожидал увидеть 60, оригинальные 20 и 40 бесплатных, Bu ti end с 30.

есть ли что-то явно не так с моим выше калом

+0

Если добавлено 5 продуктов, то общий товар в корзине (5 + 10 (бесплатно)) = 15, и если 10 продуктов будут добавлены, то общий товар в корзине будет (10 + 10 (бесплатно для первых 5) + 10 (бесплатно для следующих пяти)) = 30? –

+0

Был ли кто-нибудь из ответов отвечает вашим потребностям? Если да, можете ли вы пометить ответ по вашему выбору как принятый или оставить комментарий? – trincot

ответ

0

в ваших всех описанных случаях ваш, если условие утверждения истинно, поэтому следующий код $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']);.

0

Формула у вас есть только учетные записи для одноразового добавления бесплатного счета. Чтобы сделать это правильно, вам нужно увидеть, сколько раз это дополнение должно применяться. Это можно сделать по следующему коду:

$bugofq = $cart_item['quantity']; // default case 
if($deal['itemquantity'] >= 1){ // deal present 
    $bugofq += $deal['freequantity'] * 
      intdiv($cart_item['quantity'], $deal['itemquantity']); 
} 
Смежные вопросы