Comparer un float, j'y arrive pas :)

  • Auteur de la discussion Auteur de la discussion RomsIW
  • Date de début Date de début
Statut
N'est pas ouverte pour d'autres réponses.
WRInaute passionné
bonjour,

Soit un code PHP tel que :

Code:
$tva_max= (int) 19.5;
$tva_max2= (int) 19.6;
if($tva_max < $tva_max2) echo '1 inférieur à 2'; else echo '2 inférieur à 1';

bin figurez vous qu'il me répond 2 inférieur à 1.. j'ai essayé sans les (int) aussi...

Si vous avez la bonne syntaxe... merci !

Rom's
 
WRInaute accro
il faut peut-être remplacer (int) par (float) non ? Int c'est pour les entiers, donc il te prend que le chiffre juste avant la virgule. La condition devient donc Si ( 19 < 19 ), elle sera toujours fausse ;)
 
WRInaute passionné
e-kiwi a dit:
un simple :
echo "$tva_max $tva_max2"; te donne la réponse ;)

Code:
$tva_max= (float) 19.6;
$tva_moyenne= (float) $tva_moyenne;
echo "$tva_max $tva_moyenne";
if($tva_moyenne < $tva_max) echo '-c1'; else echo '-c2';
affiche

j'avoue ne pas comprendre.. (le float par rapport au int, c'est déjà mieux effectivement 19.5<19.6 fonctionne bien maintenant :))
 
WRInaute accro
moi je ne comprend pas non plus. tu as 19.6 dans tes 2 variables, donc cela devrait t'afficher -c2 (vu le comparateur strict)
 
WRInaute accro
Montre nous tout le code ca serait mieux :)

chez moi ceci:

Code:
$tva_max= (int) 19.6;
$tva_moyenne= (int) 19.2;
echo "$tva_max $tva_moyenne";
if($tva_moyenne < $tva_max) echo '-c1'; else echo '-c2';

m'affiche cela:

19 19-c2

et ceci:

Code:
$tva_max= (float) 19.6;
$tva_moyenne= (float) 19.2;
echo "$tva_max $tva_moyenne";
if($tva_moyenne < $tva_max) echo '-c1'; else echo '-c2';

affiche:

19.6 19.2-c1
 
WRInaute passionné
sauf que faut mettre float et ça me fait toujours bizarre que 19 soit considéré comme strictement inférieur à 19
 
WRInaute accro
montre nous tout, la tva 1, la 2 et le calcul de la moyenne que tu fais.

RomsIW a dit:
sauf que faut mettre float et ça me fait toujours bizarre que 19 soit considéré comme strictement inférieur à 19
rien compris

RomsIW a dit:
Code:
$tva_max= (float) 19.6;
$tva_moyenne= (float) $tva_moyenne;
echo "$tva_max $tva_moyenne";
if($tva_moyenne < $tva_max) echo '-c1'; else echo '-c2';
affiche

Je viens de faire la meme chose sauf que j'ai initialisé $tva_moyenne et ça fonctionne :s

Code:
$tva_moyenne = 19.6;
$tva_max= (float) 19.6;
$tva_moyenne= (float) $tva_moyenne;
echo "$tva_max $tva_moyenne";
if($tva_moyenne < $tva_max) echo '-c1'; else echo '-c2';

ce qui donne:
19.6 19.6-c2
 
WRInaute passionné
ma variable est bien initialisée (moyenne de plusieurs TVAs, donc issue d'une division), et ça ne fonctionne pas, alors que ça affiche les bonnes valeurs..
 
WRInaute discret
Ca ne fonctionne pas, ça ne veut rien dire ... au fait, le contraire de "a est inférieur à b", c'est pas "b est inférieur à a", mais "b est inférieur ou égal à a" ...
 
WRInaute accro
Tu as lu que je demandais qu'il serait nécessaire d'afficher tout ton code ?. Si tu demandes de l'aide et que tu ne lis même pas ce qu'on écrit, autant ne pas faire de post hein ;)
 
WRInaute passionné
Ouais alors non, j'ai vu d'où ça vient :

faites en sorte que le 19.6 de la variable $tva_moyenne soit le résultat d'une opération = 19.6*2/2 ce qui devrait donner un type double (chez moi, c'est une opération de type cumul tva / nb de TVAs)

si vous comparez ce type double avec la variable tva_max et bien c'est là que ça ne marche plus.

Merci
 
WRInaute passionné
déjà essayé, même de convertir après coup.

la seule méthode barbare testée pour y arriver :

number_format($var,2); (pour les deux vars)
settype($var,"double"); et là ça marche donc on pourrait se dire que ça vient des décimales..
 
WRInaute discret
C'est toi qui a vraiment un problème, car le truc suivant fonctionne sans problèmes :
Code:
<?php
$nb1 = 19.2/2;
$nb2 = 9.7;
if($nb1<$nb2) echo "1";
else echo "2";
?>

Cela va afficher "1", tout simplement ...
 
WRInaute passionné
Bh@Mp0 a dit:
C'est toi qui a vraiment un problème, car le truc suivant fonctionne sans problèmes :
Code:
<?php
$nb1 = 19.2/2;
$nb2 = 9.7;
if($nb1<$nb2) echo "1";
else echo "2";
?>

Cela va afficher "1", tout simplement ...
crois-moi, je suis pas arrivé de la dernière lune en PHP, cela fait 8 ans que je code... mais jamais vu un truc pareil, ma collègue n'a pas trouvé non plus d'autre moyen que le dernier dont j'ai parlé, et elle aussi a de la bouteille..
il peut y avoir des erreurs d'inattention, celle-ci n'en est pas. c'est soit un problème de typage, soit un problème de décimales que j'ai.
 
Nouveau WRInaute
Ne faite jamais confiance aux derniers chiffres d'un nombre décimal, mais aussi, ne comparez jamais l'égalité de 2 nombres décimaux. Si vous avez besoin d'une haute précision, les fonctions mathématiques de précision et les fonctions gmp sont disponibles.

source : doc PHP : http://fr3.php.net/float
 
Statut
N'est pas ouverte pour d'autres réponses.
Discussions similaires
Haut