Heim  >  Artikel  >  Datenbank  >  Warum sind meine MySQL-Gleitkomma-Vergleiche ungenau?

Warum sind meine MySQL-Gleitkomma-Vergleiche ungenau?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-08 13:45:02961Durchsuche

Why are My MySQL Floating-Point Comparisons Inaccurate?

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!

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