2 dumb questions

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Paul Furman

    #1

    2 dumb questions

    First, I'm sure the following code is not using an efficient structure
    for the nested if then else's but I can't recall the right way:

    if ($item_qty 19)
    {
    $price = ($price * .925);
    $qty_discount = '20 @ 7.5%';
    } else
    {
    if ($item_qty 9)
    {
    $price = ($price * .95);
    $qty_discount = '10 @ 5%';
    } else
    {
    if ($item_qty 4)
    {
    $price = ($price * .975);
    $qty_discount = '5 @ 2.5%';
    }
    }
    }

    Second question, if you see what I'm doing it's to discount e-commerce
    sales based on the quanity ordered. It's easier to pull 50 of the same
    item than 1 each of 50 different things. I'm not sure what's quite right
    but lets say an order of 1 has no discount and an order of 100 is 50%
    off. Surely there is a way of incrementally calculating the discount for
    any quantity between 1 and 100 but I'm no math whiz.

    hmmm... maybe for that one, since 50% * 2 is 100 then:

    $item_qty = 100
    $price = $100

    $qty_discount = ($item_qty/2)
    [50(%)]


    $price = ($price - ($price * ($qty_discount / 100)))
    [$50] $100 - $100 * 50%

    Um, damn, I'm lost...
  • Paul Furman

    #2
    Re: 2 dumb questions

    Paul Furman wrote:
    First, I'm sure the following code is not using an efficient structure
    for the nested if then else's but I can't recall the right way:
    >
    if ($item_qty 19)
    {
    $price = ($price * .925);
    $qty_discount = '20 @ 7.5%';
    } else
    {
    if ($item_qty 9)
    {
    $price = ($price * .95);
    $qty_discount = '10 @ 5%';
    } else
    {
    if ($item_qty 4)
    {
    $price = ($price * .975);
    $qty_discount = '5 @ 2.5%';
    }
    }
    }
    >
    Second question, if you see what I'm doing it's to discount e-commerce
    sales based on the quanity ordered. It's easier to pull 50 of the same
    item than 1 each of 50 different things. I'm not sure what's quite right
    but lets say an order of 1 has no discount and an order of 100 is 50%
    off. Surely there is a way of incrementally calculating the discount for
    any quantity between 1 and 100 but I'm no math whiz.
    I solved this part so the first problem doesn't really matter though I
    should know how to do that!

    Basically I made this 'rate' number that says how much to increment per
    unit purchased. Each additional unit gets a bit more discount.

    $item_qty = 10;
    $price = 100;

    //$1-$100 discount up to 50%
    $rate = (.5/100);

    //subtract one 'rate' so a purchase of 1 unit is not discounted .005%
    ($qty_discount = (($item_qty*$ra te)/1)-$rate);
    //set cap at 50%
    if ($item_qty 99){$qty_discou nt = .5;}
    //subtract discount from price
    $price = ($price - ($price * ($qty_discount) ));

    print " final: ".$price;


    ~returns $50 discounted price at 100 units~

    Comment

    • Kimmo Laine

      #3
      Re: 2 dumb questions

      Paul Furman kirjoitti:
      First, I'm sure the following code is not using an efficient structure
      for the nested if then else's but I can't recall the right way:
      >
      With the help of our friend "else if" you get a really clean code:

      if ($item_qty 19) {
      $price = ($price * .925);
      $qty_discount = '20 @ 7.5%';
      } else if ($item_qty 9) {
      $price = ($price * .95);
      $qty_discount = '10 @ 5%';
      } else if ($item_qty 4) {
      $price = ($price * .975);
      $qty_discount = '5 @ 2.5%';
      }

      --
      "En ole paha ihminen, mutta omenat ovat elinkeinoni." -Perttu Sirviö
      spam@outolempi. net | Gedoon-S @ IRCnet | rot13(xvzzb@bhg byrzcv.arg)

      Comment

      • Paul Furman

        #4
        Re: 2 dumb questions

        Kimmo Laine wrote:
        Paul Furman kirjoitti:
        >
        >First, I'm sure the following code is not using an efficient structure
        >for the nested if then else's but I can't recall the right way:
        >>
        >
        With the help of our friend "else if" you get a really clean code:
        >
        if ($item_qty 19) {
        $price = ($price * .925);
        $qty_discount = '20 @ 7.5%';
        } else if ($item_qty 9) {
        $price = ($price * .95);
        $qty_discount = '10 @ 5%';
        } else if ($item_qty 4) {
        $price = ($price * .975);
        $qty_discount = '5 @ 2.5%';
        }
        Thanks, that's better.
        I should know this stuff...

        Comment

        • Paul Furman

          #5
          Re: 2 dumb questions

          Paul Furman wrote:
          >Second question, if you see what I'm doing it's to discount e-commerce
          >sales based on the quanity ordered. It's easier to pull 50 of the same
          >item than 1 each of 50 different things. I'm not sure what's quite
          >right but lets say an order of 1 has no discount and an order of 100
          >is 50% off. Surely there is a way of incrementally calculating the
          >discount for any quantity between 1 and 100 but I'm no math whiz.
          >
          I solved this part..
          This is a little better:

          $price = $r["price"] / 100;
          $full_price = $price / 100;//reserve for calculating discounts
          $item_qty = $row["item_qty"];
          //quantity discount
          $limit = 50;//no further discount above this qty
          $max_disc = .3;//max discount

          $rate = ($max_disc/$limit);//discount per unit above 1

          //subtract one 'rate' so a purchase of 1 unit is not discounted
          ($qty_discount = (($item_qty*$ra te)/1));
          //set cap
          if ($item_qty ($limit-1)){$qty_discou nt = $max_disc;}
          //subtract qty discount from price
          $price = ($price - ($price * ($qty_discount) ));

          then:

          //buyer discount
          if ($discount != 0){//if any buyer discount
          if (($discount-($qty_discount* 100))>0){//if not already discounted
          above qty disc
          //reduce buyer discount by amount of quantity disc
          $adj_discount = ($discount-($qty_discount* 100));
          $price = ($price - ($full_price * ($adj_discount / 100)));
          } else {$adj_discount = 0;}
          }

          Comment

          Working...