2017-03-02 5 views
-2

こんにちは私はnewbeですし、税務目的で簡単なコードを書いています。これまで私は小さなコードを書いていましたが、私は関数を使用すると問題があると思われます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

StackOverflowのは雑用を見つけるコードのデバッグやエラーのためのものではありません。

はとswitchブロックを交換してください。この例を、問題を示すために必要な最小限のコード例に減らし、達成しようとしていること(そしてその理由)を具体的に示し、実際の動作とは対照的に予想されるものを指摘してください。 – k0pernikus

+0

私はそれも有罪だが... ...いいえ、税金プログラムを書くことは、あなたがそれらをするのを助けることはありません。税金を払う唯一の方法は、椅子にあなたの残念なお尻を座らせることです:) –

+0

こんにちはフェリックス - 残念なことに、私は生活のために何をしています。私は税務顧問です。コーディングは私の趣味です。私は私のウェブサイトwww.sipheraccounting.comに元々はif文を使ってExcelで書かれた税計算機を持っています。私はいつもプログラミングを学びたいと思っていました。私が書いたことを書くのに30日ほどかかりました。うまくいけば私はそれも働くようになるでしょう。 –

答えて

1

あなたがそこにif/elseif/elseを使用する必要があり、case文で条件を入れないでください。 switch/caseの方法は、最初のswitch()式の値と各case式の値を比較することです。したがって、$taxable_i$taxable_i > band_5の値と比較しているので、数値をtrueまたはfalseと比較しています。

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

関連する問題