Maison > base de données > tutoriel mysql > le corps du texte

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

Mary-Kate Olsen
Libérer: 2024-11-07 19:47:03
original
911 Les gens l'ont consulté

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);
Copier après la connexion

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;
Copier après la connexion

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;
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!