Cet article présente principalement la solution au fonctionnement inexact de la virgule flottante sous PHP. Les amis intéressés peuvent s'y référer. J'espère qu'il sera utile à tout le monde.
Vous en faites un récemment ? Le problème de l'addition et de la soustraction est que les opérations en virgule flottante sont inexactes. Il semble vrai que les langages interprétés ont des problèmes avec les opérations en virgule flottante.
Premier coup d'oeil à un morceau de code :
<?php $a = 0.1; $b = 0.7; var_dump(($a + $b) == 0.8);
La valeur imprimée est en fait booléenne fausse
Pourquoi cela ? Le manuel PHP contient le message d'avertissement suivant pour les nombres à virgule flottante :
Avertissement
Flottant précision du point
Apparemment, des fractions décimales simples comme 0,1 ou 0,7 ne peuvent pas être converties au format binaire interne sans perdre un peu de précision. Cela peut conduire à des résultats confus : par exemple, floor((0.1+0.7)*10) renverra généralement 7 au lieu du 8 attendu, car la représentation interne du résultat est quelque chose comme 7.9999999999... .
Ceci est lié au fait qu'il est impossible d'exprimer avec précision certaines fractions décimales avec un nombre fini de chiffres. Par exemple, 1/3 en décimal devient 0,3333333 .
Ne croyez donc jamais qu'un résultat de nombre à virgule flottante est précis jusqu'au dernier chiffre, et ne comparez jamais deux nombres à virgule flottante pour voir s'ils sont égaux. Si vous avez vraiment besoin d'une plus grande précision, vous devez utiliser des fonctions mathématiques de précision arbitraire ou des fonctions gmp
Ensuite, nous devrions réécrire le calcul ci-dessus comme
Ce qui précède est l'intégralité du contenu de cet article, j'espère qu'il sera utile à l'apprentissage de chacun.
Recommandations associées :
PHP implémente la fonction de formatage des instructions SQL
phpMéthode d'implémentation d'un modèle de conception monomorphe
Méthode d'objet de requête TP5 Request en PHP
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!