Maison >développement back-end >Problème PHP >champ à virgule flottante de requête php

champ à virgule flottante de requête php

WBOY
WBOYoriginal
2023-05-06 18:34:07542parcourir

En PHP, vous pouvez rencontrer des problèmes lors de l'interrogation de champs à virgule flottante. Cet article explique comment résoudre ces problèmes pour garantir une interrogation précise des champs à virgule flottante.

  1. Comprendre la virgule flottante

Avant de commencer à résoudre le problème, nous devons savoir quelque chose sur la virgule flottante. Les données à virgule flottante représentent des décimales et/ou des exposants. A l'intérieur de l'ordinateur, ils sont représentés en notation scientifique : a * 10^n. Parmi eux, a est la partie décimale du nombre et n est la partie exposant. Les données à virgule flottante sont très précises, mais des problèmes de précision surviennent parfois car les ordinateurs doivent les arrondir pour les représenter.

  1. La racine du problème

Lors de l'interrogation de champs à virgule flottante, la principale raison du problème est l'arrondi de PHP lors de l'expression de types à virgule flottante. Étant donné que les ordinateurs utilisent des valeurs binaires en interne et que les données à virgule flottante utilisent généralement des valeurs décimales, des erreurs d'arrondi se produisent parfois lors de la conversion d'une virgule flottante décimale en binaire. Cela conduit à des erreurs de précision qui peuvent survenir lors de l'interrogation de champs à virgule flottante en PHP.

  1. Solution

Afin de garantir l'exactitude de l'interrogation des champs à virgule flottante, nous pouvons utiliser les deux solutions suivantes :

3.1 Comparaison de chaînes

Cette méthode garantit que les données à virgule flottante sont utilisées de manière totalement précise lors de la comparaison de valeurs. . Les comparaisons de chaînes traitent les nombres à virgule flottante comme des chaînes plutôt que de comprendre leurs valeurs numériques. Cela fonctionne dans la plupart des cas, mais cela peut entraîner des problèmes d'efficacité si vous devez effectuer de nombreuses comparaisons.

Par exemple, supposons que nous ayons un prix de champ à virgule flottante, dont la valeur est 8,6. Nous pouvons définir la chaîne de requête sur :

SELECT * FROM products WHERE price = '8.6' ;

Cela garantira que la requête utilise la valeur exacte exacte à des fins de comparaison.

3.2 Comparaison de la plage d'erreur

Dans cette méthode, nous comparerons les nombres à virgule flottante avec une plage d'erreur au lieu de comparer directement leurs valeurs exactes. Cela nous permet de gérer les petites fluctuations causées par des erreurs d’arrondi et de comparer la précision des nombres à virgule flottante. Cela peut être réalisé de la manière suivante :

SELECT * FROM products WHERE price BETWEEN 8.5 AND 8.7 ;

Cette requête renverra tous les produits dont le prix est compris entre 8,5 et 8,7 (inclus).

  1. Résumé

En PHP, chaque type de nombre à virgule flottante a un bit de signe, un bit d'exposant et un bit de mantisse différents, ce qui signifie que différents types de nombres à virgule flottante peuvent être arrondis différemment. Pour garantir l'exactitude de l'interrogation des champs à virgule flottante, nous pouvons utiliser la comparaison de chaînes ou la comparaison de plages d'erreurs. La comparaison de chaînes utilise des valeurs tout à fait exactes pour la comparaison, tandis que la comparaison de plage d'erreur nous permet de comparer des nombres à virgule flottante avec une certaine erreur.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Article précédent:code php pour arrêter ApacheArticle suivant:code php pour arrêter Apache