Maison > Article > développement back-end > Quelle est l'utilisation des nombres à virgule flottante en php
Les nombres à virgule flottante PHP font référence au type à virgule flottante Float, qui peut être défini par une syntaxe telle que "$a = 1.234; $b = 1.2e3; $c = 7E-10; $d = 1_234.567;".
L'environnement d'exploitation de cet article : système Windows 7, PHP version 7.4, ordinateur DELL G3
Quelle est l'utilisation des nombres à virgule flottante php
php Float Type Float
Floating virgule ? type (également appelé type float) Numéro de point flottant, nombre double précision double ou nombre réel réel) peut être défini avec l'une des syntaxes suivantes :
<?php $a = 1.234; $b = 1.2e3; $c = 7E-10; $d = 1_234.567; // 从 PHP 7.4.0 开始支持 ?>
Les nombres à virgule flottante sont représentés sous la forme (les traits de soulignement ne sont pas pris en charge avant PHP 7.4. 0) :
LNUM [0-9]+(_[0-9]+)* DNUM ([0-9]*(_[0-9]+)*[\.]{LNUM}) | ({LNUM}[\.][0-9]*(_[0-9]+)*) EXPONENT_DNUM (({LNUM} | {DNUM}) [eE][+-]? {LNUM})
La longueur des mots 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).
Avertissement
Précision des nombres à virgule flottante
Les nombres à virgule flottante ont une précision 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 au format binaire sans perdre un peu 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.99999999999999991118... .
Ne croyez donc jamais que le résultat du nombre à virgule flottante est précis jusqu'au dernier chiffre, et ne comparez jamais si deux nombres à virgule flottante 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 la fonction gmp.
Convertir en nombre à virgule flottante
À partir de chaînes
If the string is numeric or leading numeric then it will resolve to the corresponding float value, otherwise it is converted to zero (0).
À partir d'autres types
Pour d'autres types de valeurs, la situation est similaire à la conversion de la valeur en int d'abord, puis en float. Voir la section « Conversion en nombre entier » pour plus d'informations.
注意: As certain types have undefined behavior when converting to int, this is also the case when converting to float.
Comparaison de nombres à virgule flottante
Comme le message d'avertissement ci-dessus le dit, en raison d'expressions internes, comparer deux nombres à virgule flottante pour l'égalité est problématique. 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 tout petit peu plus grande que cette valeur. Cette valeur, également connue sous le nom d'epsilon machine ou plus petit entier unitaire, est la plus petite valeur de différence pouvant être acceptée dans le calcul.
$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"; } ?>
NaN
Certaines opérations mathématiques produisent un résultat représenté par la constante NAN. Ce résultat représente une valeur indéfinie ou non représentable en arithmétique à virgule flottante. Toute comparaison vague ou stricte de cette valeur avec toute autre valeur (sauf vrai) donne lieu à faux.
Étant donné que NAN représente une valeur différente, NAN ne doit pas être comparé à d'autres valeurs, y compris elle-même, et doit être vérifié à l'aide de is_nan().
Apprentissage recommandé : "Tutoriel vidéo 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!