2017-03-02 3 views
-2

Salut, je suis un newbe et écrit un code simple à des fins fiscales. Jusqu'à présent, j'ai écrit un petit code mais je pense qu'il semble y avoir un problème avec la fonction taxable_i($i) qui ne me laisse pas faire $taxable_iNIL. J'ai tout essayé. Lorsque j'essaie de faire $taxable_iNIL via la fonction, il ne me laisse pas le faire. Il me montre un résultat de £13900. Je pense que le programme fait écho à $taxable_i plutôt qu'à l'impôt à payer. Si je supprime tous les ci-dessus tous ensemble, l'impôt à payer vient à -£2199.80, ce qui est en moins. S'il vous plaît noter que je mets $taxable_i <personal_allowance de sorte que la réponse est zéro mais le résultat n'est pas zéro. Je ne sais pas pourquoi et ce que je fais mal. Toute aide est la bienvenue.php comment éviter la réponse négative

<?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 n'est pas pour le débogage de code ou d'erreur de trouver des tâches. Veuillez réduire l'exemple à l'exemple de code minimal requis pour mettre en évidence votre problème, élaborer sur ce que vous essayez d'atteindre (et pourquoi) et indiquer le comportement attendu par opposition au comportement réel. – k0pernikus

+0

J'ai été coupable de cela aussi mais ... non, écrire des programmes fiscaux ne vous aidera pas à les faire. La seule façon d'obtenir des impôts, est de s'asseoir votre cul désolé sur une chaise et les faire :) –

+0

Salut Felix - malheureusement c'est ce que je fais pour vivre. Je suis un conseiller fiscal. Le codage est mon passe-temps. J'ai une calculatrice d'impôt sur mon site Web www.sipheraccounting.com qui a été écrit dans Excel en utilisant des déclarations if. J'ai toujours voulu apprendre la programmation maintenant j'ai mis environ 30 jours pour écrire ce que j'ai écrit. J'espère que ça marchera aussi. –

Répondre

1

Vous ne mettez pas les conditions dans case déclarations, vous devez utiliser il if/elseif/else. La façon dont switch/case fonctionne est qu'il compare la valeur de l'expression initiale switch() avec les valeurs de chaque expression case. Donc, il compare $taxable_i à la valeur de $taxable_i > band_5, donc il compare un nombre à true ou false.

Remplacer le bloc switch avec:

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

Merci beaucoup Barmar. Ça fonctionne maintenant. –

+0

Vous devez accepter la réponse si elle a résolu le problème. Cliquez sur la coche à côté de celui-ci. – Barmar