цифры — php как избежать отрицательного ответа

Привет, я новичок и пишу простой код для целей налогообложения. До сих пор я написал небольшой код, но я думаю, что есть проблема с функцией taxable_i($i) что не позволяет мне сделать $taxable_i NIL, Я перепробовал все.
Когда я пытаюсь сделать $taxable_i NIL через функцию это не позволит мне сделать это. Это показывает мне результат £13900, Я думаю, что программа повторяется $taxable_i а не налог, подлежащий уплате.
Если я удалю все вышеперечисленное вместе, налог будет -£2199.80, что в минус.
Обратите внимание, что я поставил $taxable_i <personal_allowance так что ответ ноль, но результат не ноль. Я не знаю почему и что я делаю не так.
Любая помощь приветствуется.

<?php
// VAT
define("vat_threshold",83000 );
define("vat_rate",0.2 );

// RELIEFS
define("personal_allowance",11000 );

//RATES
define("starting_rate",0 );
define("basic_rate",0.2 );
define("higher_rate",0.4 );
define("add_rate",0.45 );
define("divs_ord_rate",0.075 );
define("divs_uuper_rate",0.325 );
define("divs_add_rate",0.381 );

// THRESHOLDS
define("savings_income_band",5000 );
define("basic_rate_band",32000 );
define("higher_rate_band",150000 );
define("divs_allowance",5000 );

define ("band_0",0);
define("band_1",11000);
define("band_2",32000);
define("band_3",100000);
define("band_4",122000);
define("band_5",150000);

function taxable_i($i) {

if ($i <= band_1 ) {
$taxable_i = $i * 0;
return $taxable_i;
}
if ($i <= band_3 ) {
$taxable_i = $i - personal_allowance;
return $taxable_i;
}
if ($i >band_3 && $i <=band_4) {
$taxable_i = $i - (personal_allowance-($i - band_3)/2);
return $taxable_i;
}
if ($i > band_4) {
$taxable_i = $i;
return $taxable_i;
}

}

$starting_income = $i = 1;
echo $i;

$taxable_i = taxable_i($i);
echo $taxable_i;

switch ($taxable_i) {

case ($taxable_i > band_5):
$diff = $taxable_i - band_5;
$tax5 = $diff * add_rate;
$taxable_i = band_5;
$diff = $taxable_i - band_2;
$tax4 = $diff * higher_rate;
$taxable_i = band_2;
$tax3 = $taxable_i * basic_rate;
$tax_payable = $tax5 + $tax4 + $tax3;
break;

case ($taxable_i > band_2 && $taxable_i <= band_5 ):
$diff = $taxable_i - band_2;
$tax4 = $diff * higher_rate;
$taxable_i = band_2;
$tax3 = $taxable_i * basic_rate;
$tax_payable = $tax4 + $tax3;
break;

case ($taxable_i < band_2):
$tax = $taxable_i * basic_rate;
$tax_payable = $tax;
break;

default:
$taxable_i <= band_0;
$tax_payable == 0;
break;
}

echo $tax_payable;
?>

-2

Решение

Вы не ставите условия в case заявления, вы должны использовать if/elseif/else там. Путь switch/case работает то, что он сравнивает значение начального switch () выражение со значениями каждого case выражение. Так что это сравнение $taxable_i к стоимости $taxable_i > band_5так что сравнивает число с true или же false,

Заменить switch блок с:

if ($taxable_i > band_5) {
$diff = $taxable_i - band_5;
$tax5 = $diff * add_rate;
$taxable_i = band_5;
$diff = $taxable_i - band_2;
$tax4 = $diff * higher_rate;
$taxable_i = band_2;
$tax3 = $taxable_i * basic_rate;
$tax_payable = $tax5 + $tax4 + $tax3;
}

elseif ($taxable_i > band_2 ) {
$diff = $taxable_i - band_2;
$tax4 = $diff * higher_rate;
$taxable_i = band_2;
$tax3 = $taxable_i * basic_rate;
$tax_payable = $tax4 + $tax3;
}

elseif ($taxable_i >= band_0) {
$tax = $taxable_i * basic_rate;
$tax_payable = $tax;
}

else {
$tax_payable == 0;
break;
}
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]