8
votes

Comportement impair comparant les doubles, deux valeurs doubles PHP ne sont pas équivalentes

J'ai deux double valeurs apparemment égales en PHP (au moins lors de leur écho).

Mais lorsque vous les comparez à un double équivaut, pour une raison quelconque, il est évalué à faux. Existe-t-il des considérations spéciales lors de l'exécution de ce type de comparaison?


1 commentaires

Pouvez-vous poster le code que vous utilisez et celles-ci sont doubles?


5 Réponses :


1
votes

float et double ne doivent jamais être comparés pour l'égalité: il existe des erreurs de précision qui feront deux chiffres différents, même s'ils semblent égaux (lorsqu'ils sont imprimés, ils sont généralement arrondis).

La bonne façon de comparer utilise Constante Delta: P>

define(DELTA, 0.00001); // Or whatever precision you require

if (abs($a-$b) < DELTA) {
  // ...
}


0 commentaires

14
votes

Vous ne devez pas comparer les numéros de points flottants à l'aide de l'opérateur == code>.

Voir le grand avertissement et explication dans le manuel PHP code> p>

Que fonctionnera affirmer que les deux chiffres sont dans un certain petit Distance les uns des autres comme ceci: p>

if(abs($a - $b) < 0.0001) {
    print("a is mostly equal to b");
}


0 commentaires


1
votes

Une petite fonction que j'ai faite, l'espoir aide quelqu'un: xxx

usage: xxx


0 commentaires

1
votes

Pas le moyen le plus rapide mais convertir en chaîne avant de comparer: xxx


0 commentaires