Probleme mit dem MySQL-Gleitkomma-Vergleich
Sie stoßen auf Probleme mit Gleitkomma-Vergleichen in MySQL, weil Gleitkommazahlen von Natur aus ungenau sind auf die Art und Weise, wie sie binär dargestellt werden. Dies kann zu unerwarteten Ergebnissen führen, wenn Werte verglichen werden, die gleich sein sollten.
Betrachten Sie das folgende Beispiel:
SELECT COUNT(*) FROM `users` WHERE `points` > "12.75"
Sie würden erwarten, dass diese Abfrage 2 zurückgibt, da es zwei Zeilen mit Punkten gibt größer als 12,75. Es wird jedoch 3 zurückgegeben, da Gleitkommazahlen mit einer begrenzten Anzahl von Bits dargestellt werden, was zu Rundungsfehlern führt.
Experten empfehlen die Verwendung des Datentyps DECIMAL anstelle von FLOAT oder DOUBLE für Finanzberechnungen und andere Anwendungen, bei denen dies der Fall ist Präzision ist entscheidend. DECIMAL speichert Werte als Festkommazahlen und eliminiert so Rundungsfehler, die bei Gleitkommazahlen auftreten können.
Zur Veranschaulichung konvertieren wir die Punktespalte von FLOAT in DECIMAL:
ALTER TABLE `users` MODIFY COLUMN `points` DECIMAL(6,2)
Wenn Sie die Abfrage nun erneut ausführen, erhalten Sie das erwartete Ergebnis 2.
Das obige ist der detaillierte Inhalt vonWarum sind meine MySQL-Gleitkomma-Vergleiche ungenau?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!