Heim >Datenbank >MySQL-Tutorial >Warum hat MySQL Probleme mit dem Vergleich von Gleitkommawerten?

Warum hat MySQL Probleme mit dem Vergleich von Gleitkommawerten?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-07 19:47:031005Durchsuche

Why Does MySQL Struggle with Comparing Floating-Point Values?

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

  • Verwenden Sie STANDARD Schlüsselwort, um einen Standardwert für Gleitkommaspalten anzugeben und NULL-Werte zu vermeiden.
  • Erwägen Sie die Verwendung ROUND()- oder TRUNCATE()-Funktionen vor der Durchführung von Vergleichen, um Rundungsfehler zu verringern.

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn