Skip to content
Advertisement

How come I am unable to get the output for tax for my code?

Write a function to compute the discount and tax when you pay for a shopping items in a shop. Discount is 20% if the total order > $200, else the discount is 0. Tax is 7% of the total order after discount.

<?php
            function computeDiscountAndTax($discount, $tax){
                $totalOrder = 100;
                if ($totalOrder > 200){
                    $discount = ($discount/100) * $totalOrder;
                    $tax = ($tax/100) * ($totalOrder - $discount);
                    return array($discount, $tax);
                } else {
                    $tax = ($tax/100) * $totalOrder;
                }
            }

            $result_array = computeDiscountAndTax(0, 7);
            echo "Discount: " . $result_array[0] . "<br>";
            echo "Tax: " . $result_array[1] . "<br>";
?>

Advertisement

Answer

Your problem is you’re not returning anything after else. You set tax to equal something, but you don’t return it.

The following will get you the output that you’re expecting.

<?php
function computeDiscountAndTax($discount, $tax){
            $totalOrder = 100;
            if ($totalOrder > 200){
                    $discount = ($discount/100) * $totalOrder;
                    $tax = ($tax/100) * ($totalOrder - $discount);
                    return array($discount, $tax);
            } else {
                    return array(0, ($tax/100) * $totalOrder);
            }
        }

        $result_array = computeDiscountAndTax(10, 7);
        echo "Discount: " . $result_array[0] . "<br />";
        echo "Tax: " . $result_array[1] . "<br />";

However, it should be noted, there is a lot odd about what you’re doing. Why is the total hard-coded inside the function? Why are you returning the values as non-associative array? This has the potential of getting really confusing really fast.

I’d recommend doing something like this.

<?php
function computeDiscountAndTax($order, $discount, $tax){
            $tax = ($tax/100) * ($order - $discount);
            $discount = $order > 200 ? ($discount/100) * $order : 0;
            return ["discount" => $discount, "tax" => $tax];
        }

        $results = computeDiscountAndTax(100, 10, 7);
        echo "Discount: " . $results['discount'] . "<br />";
        echo "Tax: " . $results['tax'] . "<br />";
User contributions licensed under: CC BY-SA
2 People found this is helpful
Advertisement