Heim > Datenbank > MySQL-Tutorial > Hauptteil

Warum sind Gleitkommavergleiche in MySQL ungenau?

Mary-Kate Olsen
Freigeben: 2024-11-10 21:42:02
Original
726 Leute haben es durchsucht

Why are Floating-Point Comparisons in MySQL Inaccurate?

Herausforderungen beim MySQL-Gleitkomma-Vergleich

MySQL-Benutzer stoßen beim Vergleich von Gleitkommawerten häufig auf Ungenauigkeiten. Betrachten Sie das folgende Beispiel:

CREATE TABLE users (points float);
Nach dem Login kopieren
INSERT INTO users VALUES (50.12);
INSERT INTO users VALUES (34.57);
INSERT INTO users VALUES (12.75);
Nach dem Login kopieren

Die Abfrage SELECT COUNT(*) FROM users WHERE zeigt > „12,75“ gibt 3 zurück, obwohl eine Zählung von 2 erwartet wird.

Das Problem mit der Gleitkomma-Arithmetik

MySQL verwendet Gleitkomma-Arithmetik, um den Gleitkomma-Typ zu speichern und zu bearbeiten Werte. Dieses System stellt Zahlen mithilfe einer Kombination aus einem Signifikanten (der tatsächlichen Zahl) und einem Exponenten dar, was möglicherweise zu Präzisionsproblemen führt. Beispielsweise kann der Wert 12,75 aufgrund der binären Darstellung von Gleitkommazahlen bei der Eingabe in MySQL als 12,75000005722 gespeichert werden.

Exakte Dezimaldarstellung

Um dies zu vermeiden Bei Ungenauigkeiten wird empfohlen, in MySQL den Datentyp DECIMAL für eine präzise Dezimaldarstellung zu verwenden. Im Gegensatz zu Float speichert DECIMAL Werte als Festkommazahlen und gewährleistet so eine genaue Genauigkeit.

Konvertieren in DECIMAL

Um eine vorhandene Float-Spalte in DECIMAL zu konvertieren, verwenden Sie ALTER TABLE Anweisung:

ALTER TABLE users MODIFY points DECIMAL(6,2);
Nach dem Login kopieren

Dadurch werden Punkte in eine Dezimalspalte mit insgesamt 6 Ziffern und 2 Dezimalstellen umgewandelt. Sie können die Präzision und den Maßstab nach Bedarf anpassen.

Fazit

Während Float praktisch erscheinen mag, können die inhärenten Ungenauigkeiten der Gleitkomma-Arithmetik beim Vergleich zu unerwarteten Ergebnissen führen Werte. Für eine präzise Dezimaldarstellung und genaue Vergleiche wird dringend empfohlen, in MySQL den Datentyp DECIMAL zu verwenden. Durch die Verwendung von DECIMAL können Sie die potenziellen Fallstricke von Gleitkommavergleichen vermeiden und die Zuverlässigkeit Ihrer Daten sicherstellen.

Das obige ist der detaillierte Inhalt vonWarum sind Gleitkommavergleiche in MySQL ungenau?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage