php математические вычисления не дают корректных результатов

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

Вот мой код:

$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, origial 20 и 40 бесплатно, Bu ti в конечном итоге с 30.

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

2 ответа

  1. В всех описанных случаях, если условие принимает значение 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']);.

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

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