Maison >base de données >tutoriel mysql >Pourquoi MySQL a-t-il du mal à comparer les valeurs à virgule flottante ?

Pourquoi MySQL a-t-il du mal à comparer les valeurs à virgule flottante ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-07 19:47:031005parcourir

Why Does MySQL Struggle with Comparing Floating-Point Values?

Les pièges de MySQL dans la comparaison des valeurs à virgule flottante

Les calculs à virgule flottante dans MySQL peuvent conduire à des comparaisons erronées en raison de limitations de précision inhérentes. Pour résoudre ce problème, envisagez plutôt d'utiliser le type DECIMAL.

Imprécision intrinsèque de l'arithmétique à virgule flottante

Les nombres à virgule flottante sont stockés avec une précision limitée, ce qui peut introduire de légers inexactitudes lors des calculs. Par exemple, considérons le nombre 50,12 stocké sous forme de flottant dans MySQL :

CREATE TABLE users (points FLOAT);
INSERT INTO users (points) VALUES (50.12);

Lorsque vous comparez cette valeur avec 12,75 à l'aide de l'opérateur >, MySQL renvoie "False", même si 50,12 est supérieur à 12,75.

SELECT COUNT(*) FROM users WHERE points > 12.75;

L'avantage DECIMAL

Pour éviter de telles incohérences, le type de données DECIMAL fournit une précision et une échelle fixes, garantissant l'exactitude des calculs et des comparaisons. Par exemple :

ALTER TABLE users MODIFY COLUMN points DECIMAL(6,2);
UPDATE users SET points = 50.12;
SELECT COUNT(*) FROM users WHERE points > 12.75;

Maintenant, la comparaison renvoie « Vrai », comme prévu.

Considérations supplémentaires

  • Utilisez la valeur DEFAULT mot-clé pour spécifier une valeur par défaut pour les colonnes à virgule flottante, en évitant les valeurs NULL.
  • Envisagez d'utiliser les fonctions ROUND() ou TRUNCATE() avant d'effectuer des comparaisons afin d'atténuer les erreurs d'arrondi.

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