Problèmes de comparaison à virgule flottante MySQL
Vous rencontrez des problèmes avec les comparaisons à virgule flottante dans MySQL, car les nombres à virgule flottante sont intrinsèquement inexacts en raison à la façon dont ils sont représentés en binaire. Cela peut conduire à des résultats inattendus lors de la comparaison de valeurs qui devraient être égales.
Considérons l'exemple suivant :
SELECT COUNT(*) FROM `users` WHERE `points` > "12.75"
Vous vous attendez à ce que cette requête renvoie 2, car il y a deux lignes avec des points supérieur à 12,75. Cependant, il renvoie 3 car les nombres à virgule flottante sont représentés avec un nombre limité de bits, ce qui entraîne des erreurs d'arrondi.
Les experts recommandent d'utiliser le type de données DECIMAL au lieu de FLOAT ou DOUBLE pour les calculs financiers et d'autres applications où la précision est cruciale. DECIMAL stocke les valeurs sous forme de nombres à virgule fixe, éliminant ainsi les erreurs d'arrondi qui peuvent survenir avec les nombres à virgule flottante.
Pour illustrer, convertissons la colonne de points de FLOAT en DECIMAL :
ALTER TABLE `users` MODIFY COLUMN `points` DECIMAL(6,2)
Désormais, lorsque vous exécuterez à nouveau la requête, vous obtiendrez le résultat attendu de 2.
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!