Float (également appelé floatfloat, double ou réel) peut être défini avec l'une des syntaxes suivantes :
<?php $a = 1.234; $b = 1.2e3; $c = 7E-10; ?>
Représentation des nombres à virgule flottante :
LNUM [0-9]+
DNUM ([0-9]*[.]{LNUM }) ({LNUM }[.][0-9]*)
EXPONENT_DNUM [+-]?(({LNUM} | {DNUM}) [eE][+-]? {LNUM})
Le mot La longueur des nombres à virgule flottante dépend de la plate-forme, bien que la valeur maximale soit généralement de 1,8e308 avec une précision de 14 chiffres décimaux (format IEEE 64 bits).
Attention
La précision des nombres à virgule flottante est limitée. Bien que cela dépende du système, PHP utilise généralement le double format IEEE 754, donc l'erreur relative maximale due à l'arrondi est de 1.11e-16. Les opérations mathématiques non fondamentales peuvent donner lieu à des erreurs plus importantes, et la propagation des erreurs lors de l'exécution d'opérations composées doit être prise en compte.
De plus, les nombres rationnels tels que 0,1 ou 0,7 qui peuvent être représentés avec précision en décimal, quel que soit le nombre de mantisses, ne peuvent pas être représentés avec précision par le binaire utilisé en interne et ne peuvent donc pas être convertis en binaire 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 en fait quelque chose comme 7.999999999999999991118... .
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 la fonction mathématique de précision arbitraire ou la fonction gmp.
Voir la page Web du Guide de virgule flottante pour une explication simple.
Si vous souhaitez des informations sur quand et comment convertir une Chaîne en nombre à virgule flottante, voir Conversion d'une chaîne en festival de nombres . Pour les autres types de valeurs, la situation est similaire à la conversion de la valeur en entier puis en virgule flottante. Voir la section « Conversion en nombre entier » pour plus d'informations. Depuis PHP 5, si vous tentez de convertir un objet en un nombre à virgule flottante, un message d'erreur E_NOTICE est émis.
Comme l'indique le message d'avertissement ci-dessus, pour des raisons d'expression interne, il y a un problème lors de la comparaison de deux nombres à virgule flottante pour l'égalité. Cependant, il existe des moyens détournés pour comparer les valeurs à virgule flottante.
Pour tester l'égalité des nombres à virgule flottante, utilisez une valeur d'erreur minimale qui n'est qu'un point supérieure à cette valeur. Cette valeur est également appelée valeur minimale de la machine (epsilon) ou la plus petite unité est un entier , qui est la plus petite valeur de différence acceptable dans les calculs.
$a et $b sont égaux à cinq décimales de précision.<?php $a = 1.23456789; $b = 1.23456780; $epsilon = 0.00001; if(abs($a-$b) < $epsilon) { echo "true"; } ?>
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!