2017-03-02 27 views
-2

嗨,我是一個新手,併爲稅務目的寫一個簡單的代碼。到目前爲止,我已經寫了一個小代碼,但我認爲功能taxable_i($i)似乎有問題,它不會讓我製作$taxable_iNIL。我已經嘗試了一切。 當我試圖通過函數$taxable_iNIL它不會讓我這樣做。它向我展示了£13900的結果。我認爲該計劃迴應$taxable_i而不是應付稅款。 如果我將上述全部刪除,那麼應納稅額爲-£2199.80,該值爲負值。 請注意,我把$taxable_i <personal_allowance,以便答案是零,但結果不是零。我不知道我爲什麼和我做錯了什麼。 任何幫助是最受歡迎的。'php如何避免負面答案

<?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; 
?> 
+0

#1並不意味着對代碼的調試或錯誤查找瑣事:

與更換switch塊。請將示例簡化爲展示您的問題所需的最低必需代碼示例,詳細說明您嘗試實現的目標(以及爲什麼),並指出與實際行爲相反的預期。 – k0pernikus

+0

我也曾犯過這個錯誤,但是......不,寫稅務計劃不會幫助你做到這一點。要完成稅收的唯一方法就是坐在椅子上對不起你的屁股做他們:) –

+0

嗨費利克斯 - 不幸的是,這是我的生活。我是稅務顧問。編碼是我的愛好。我在我的網站www.sipheraccounting.com上有一個稅務計算器,最初使用if語句在Excel中編寫。我一直想學習編程,現在我已經花了大約30天時間寫出我寫的內容。希望我也能得到它的工作。 –

回答

1

你不把條件case報表,你應該使用if/elseif/else那裏。 switch/case的工作方式是將最初的switch()表達式的值與每個case表達式的值進行比較。因此它將$taxable_i$taxable_i > band_5的值進行比較,因此它將數字與truefalse進行比較。

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; 
} 
+0

非常感謝Barmar。它現在有效。 –

+0

如果解決了問題,您應該接受答案。點擊旁邊的複選標記。 – Barmar