Prenons l'exemple suivant. Nous comparons un nombre flottant définit avec un nombre flottant obtenu par un soustraction.
<?php
$a = 0.57;
$b = 1-0.43;
if($a==$b){
echo "\$a et \$b sont égaux";
}else{
echo "\$a et \$b ne sont pas égaux";
}
?>
Ce code affichera "$a et $b ne sont pas égaux", bien que $a et $b soient égaux. L'erreur n'est pas systématique et dépend du système qui fait tourner le script.
Mais il est conseillé de prendre la bonne habitude de comparer des nombres en prévoyant une marge d'erreur.
La fonction suivante vous indique si deux nombres flottants sont égaux en comparant le résultat d'une soustraction avec une marge d'erreur que vous définirez. Ici j'ai utilisé 0.01, mais vous pouvez augmenter la précision, tout dépend du contexte.
// compare deux nombres floattants
function FloatEgal($a, $b){
return abs($a-$b)<0.01 ? 1:0;
}
Vous pouvez comparer des nombres flottants en toute sérénité.
if(FloatEgal($a, $b)){
echo "\$a et \$b sont égaux";
}else{
echo "\$a et \$b ne sont pas égaux";
}
?>
$a et $b sont égaux
Pour plus d'information sur la précision, je vous conseille de lire le manuel PHP, notamment le gros paragraphe rouge.