Vinzenz Mai: Genauigkeit von Gleitpunktzahlen

Beitrag lesen

Hallo

ich habe einen Datensatz, wo der Wert der Spalte "abc" (float) genau 90.63 ist. Wenn ich nun die Anweisung

Wenn der Datentyp der Spalte abc float ist, so ist es absolut unmöglich, dass der in der Spalte enthaltene Wert _genau_ 90.63 ist.

SELECT * FROM stats_users WHERE abc >= 90.63

ausführe, habe ich kein Ergebnis. Wenn ich

SELECT * FROM stats_users WHERE abc >= 90.629

ausführe, bekomme ich den richtigen Datensatz.
Ich hab doch kein Fehler in der SQL-Anweisung!?

Deine SQL-Anweisung ist wahrscheinlich nicht fehlerhaft. Dein Tabellendesign ist möglicherweise fehlerhaft. Falls es nicht fehlerhaft ist, dann ist die Logik, die zu Deiner SQL-Anweisung führt, fehlerhaft.

Langer Rede kurzer Sinn: Du hast ein Problem mit der Genauigkeit von Gleitpunktzahlen. Dies hat nichts mit SQL oder Datenbanken im speziellen zu tun, sondern ist eine Frage des Datentyps. Eine weiterführende Diskussion (von vielen ähnlichen) findest Du im Archiv.

Datenbanksysteme bieten jedoch meist auch Datentypen, die exakt sind. Vielleicht wäre bei Dir DECIMAL  eher angebracht - das ist das, was ich mit fehlerhaftem Tabellendesign bezeichnete. Du hast möglicherweise den falschen Datentyp ausgewählt. Ist Float der richtige Datentyp, dann darfst Du nicht so abfragen, wie Du das vorhast. Dann ist die Logik, die zur Abfrage führt, falsch :-)

Freundliche Grüße

Vinzenz