Défis de comparaison de valeurs à virgule flottante MySQL
Les utilisateurs de MySQL rencontrent souvent des inexactitudes lors de la comparaison de valeurs à virgule flottante. Prenons l'exemple suivant :
CREATE TABLE users (points float);
INSERT INTO users VALUES (50.12); INSERT INTO users VALUES (34.57); INSERT INTO users VALUES (12.75);
La requête SELECT COUNT(*) FROM users WHERE points > "12.75" renvoie 3, malgré l'attente d'un décompte de 2.
Le problème avec l'arithmétique à virgule flottante
MySQL utilise l'arithmétique à virgule flottante pour stocker et manipuler les valeurs de type flottant. Ce système représente les nombres en utilisant une combinaison d'une mantisse (le nombre réel) et d'un exposant, ce qui entraîne des problèmes potentiels de précision. Par exemple, la valeur 12,75 peut être stockée sous la forme 12,75000005722 lorsqu'elle est saisie dans MySQL en raison de la représentation binaire des nombres à virgule flottante.
Représentation décimale exacte
Pour éviter une telle inexactitudes, il est recommandé d'utiliser le type de données DECIMAL dans MySQL pour une représentation décimale précise. Contrairement à float, DECIMAL stocke les valeurs sous forme de nombres à virgule fixe, garantissant une précision exacte.
Conversion en DECIMAL
Pour convertir une colonne flottante existante en DECIMAL, utilisez la commande ALTER TABLE instruction :
ALTER TABLE users MODIFY points DECIMAL(6,2);
Cela convertira les points en un colonne décimale avec 6 chiffres au total et 2 décimales. Vous pouvez ajuster la précision et l'échelle selon vos besoins.
Conclusion
Bien que float puisse sembler pratique, les inexactitudes inhérentes à l'arithmétique à virgule flottante peuvent conduire à des résultats inattendus lors de la comparaison. valeurs. Pour une représentation décimale précise et des comparaisons précises, il est fortement recommandé d'utiliser le type de données DECIMAL dans MySQL. En utilisant DECIMAL, vous pouvez éviter les pièges potentiels des comparaisons à virgule flottante et garantir la fiabilité de vos données.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3