MySQLs Fallstricke beim Vergleich von Gleitkommawerten
Gleitkommaberechnungen in MySQL können aufgrund inhärenter Genauigkeitsbeschränkungen zu fehlerhaften Vergleichen führen. Um dieses Problem zu beheben, sollten Sie stattdessen den Typ DECIMAL verwenden.
Intrinsische Ungenauigkeit der Gleitkomma-Arithmetik
Gleitkommazahlen werden mit begrenzter Genauigkeit gespeichert, was zu geringfügigen Abweichungen führen kann Ungenauigkeiten bei Berechnungen. Betrachten Sie beispielsweise die Zahl 50,12, die als Float in MySQL gespeichert ist:
CREATE TABLE users (points FLOAT); INSERT INTO users (points) VALUES (50.12);
Wenn Sie diesen Wert mit 12,75 mit dem Operator > vergleichen, gibt MySQL „False“ zurück, obwohl 50,12 größer als 12,75 ist.
SELECT COUNT(*) FROM users WHERE points > 12.75;
Das DEZIMAL Vorteil
Um solche Inkonsistenzen zu vermeiden, bietet der Datentyp DECIMAL eine feste Genauigkeit und Skalierung und stellt so sicher, dass Berechnungen und Vergleiche korrekt sind. Beispiel:
ALTER TABLE users MODIFY COLUMN points DECIMAL(6,2); UPDATE users SET points = 50.12; SELECT COUNT(*) FROM users WHERE points > 12.75;
Jetzt gibt der Vergleich wie beabsichtigt „True“ zurück.
Zusätzliche Überlegungen
Das obige ist der detaillierte Inhalt vonWarum hat MySQL Probleme mit dem Vergleich von Gleitkommawerten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!