Fonction PHP

  • Auteur de la discussion Auteur de la discussion poupilou
  • Date de début Date de début
WRInaute passionné
Salut à tous,

J'essaie de créer une fonction php qui me calcul un prix TTC avec un taux de TVA qui est stocké dans une variable mais ça marche pas et je pige pas pourquoi, voici mon code :

Code:
$TVA = 19.60;

function get_prix($prix){
$price1 = $prix+($prix*($TVA/100));
$price = "".number_format($price1, 2, ',', ' ')."";
return $price;
}

echo "".get_prix(1125)."";

Ca me retourne 1125 et non pas 1345,50 :(

Merci pour votre aide.
 
WRInaute passionné
Merci beaucoup Spout, ça marche parfaitement bien avec ta global $TVA; ça fait plus d'une demi journée que je cherchais la solution :x
 
WRInaute impliqué
Il n'y a pas que la porté des variables à revoir, à regarder les concaténations faites ...

Le mieux est tout de même de passer par un paramètre :
PHP:
<span class="syntaxdefault"></span><span class="syntaxkeyword"><?</span><span class="syntaxdefault">php<br />$TVA </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> 19.60</span><span class="syntaxkeyword">;<br /><br /></span><span class="syntaxdefault">function get_prix</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$prix</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> $taxe</span><span class="syntaxkeyword">)</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">{<br /></span><span class="syntaxdefault">    return number_format</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$prix </span><span class="syntaxkeyword">+</span><span class="syntaxdefault"> $prix </span><span class="syntaxkeyword">*</span><span class="syntaxdefault"> $taxe </span><span class="syntaxkeyword">/</span><span class="syntaxdefault"> 100</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> 2</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> </span><span class="syntaxstring">','</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> </span><span class="syntaxstring">' '</span><span class="syntaxkeyword">);<br />}<br /><br /></span><span class="syntaxdefault">echo get_prix</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">1125</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> $TVA</span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault"> </span>

Lavantage est que tu peux demander le prix sans dépendre de la valeur de la taxe :
PHP:
<span class="syntaxdefault"><br />get_prix</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">1125</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> 19.6</span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault">get_prix</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">1125</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> 5.5</span><span class="syntaxkeyword">);<br /></span><span class="syntaxcomment">// etc.<br /></span><span class="syntaxdefault"> </span>
 
WRInaute passionné
Merci Spout et merci Blount.

Ta fonction de calcul de taxe est très intéressante et en plus elle fonctionne parfaitement bien :D

Oui j'ai un problème de concacténation, tu l'as remarqué... si j'avais que ce problème je serais un vrai pro du php mais bon ce sera peut-être dans une autre vie :?

Ce qui m'a étonné (par manque de compétence en php :? ) c'est que ce calcul "$prix + $prix * $taxe / 100" fonctionne sans les parenthèses qui permettent, parfois, d'indiquer quelle opération doit être exécutée avant une autre :?:

On doit appeler cela en php la Priorité des opérateurs et je m'empresse d'indiquer ce lien http://php.net/manual/fr/language.operators.precedence.php aux ignares (comme moua :oops: ) afin qu'ils révisent un peu ces notions de précédence des opérateurs.

On apprend donc que la multiplication ("*") a une priorité supérieure par rapport à l'addition ("+") et que lorsque les opérateurs ont une précédence équivalente, c'est leur associativité qui détermine s'ils sont évalués de droite à gauche ou inversement....
 
WRInaute passionné
Ah non alors là tu me tues définitivement :

1) tu me dit que ce n'est que des maths... mais je suis nul en maths :(

2) et tu me renvoies vers un lien de la wiki.... alors là tu m'achèves... je supporte pas la wiki, c'est épidermique :evil: :mrgreen: :oops: :( 8O :D
 
WRInaute impliqué
On peut être nul en math, je le conçois. Mais là, c'est tout de même de l'élémentaire, des maths de tous les jours.
Je ne t'oblige pas à aller sur Wikipedia, Duck Duck Go est ton ami ;)
 
WRInaute passionné
Ah ben ça alors un canard maintenant, je ne le connaissais pas celui là :mrgreen:

Je reprend ta fonction Blount et je voudrais la customiser un peu, je voudrais pouvoir ajouter devant le prix un sigle monétaire (USD, GBP, JPY, etc... ou bien le sigle € par défaut, ce sigle est stocké dans un cookie) mais je voudrais qu'en cas de changement de monnaie (USD, GBP, etc...) ce sigle soit réduit en taille par rapport au prix, j'ai fait ce bout de code ci-dessous mais est-ce qu'il n'y a pas autre chose à faire (plus simple) :

Code:
$TVA = 19.60;

function get_prix($prix, $taxe) {
    $check_monnaie = explode("+", $_COOKIE['monnaie']);
    $price1 = $prix + $prix * $taxe / 100;
    if($check_monnaie[0]!="USD"){$price = "<font size=\"1\">".$check_monnaie[0]."</font>&nbsp;".number_format($price1, 2, ',', ' ')."";}
    else{$price = "".$check_monnaie[0]."$price1";}
return $price;
}

echo get_prix(1125, $TVA);

Ca devrait afficher soit €1 125, soit USD1 125

Est-ce qu'on peut pas rajouter une autre variable $monnaie dans function get_prix($prix, $taxe, $monnaie) ?
 
Discussions similaires
Haut