Lustige Effekte mit Fließkommazahlen (?)

Carny

Well-known member
ID: 171941
L
25 April 2006
2.025
78
Hi,

ich bin gerade nach längerem Suchen warum meine Funktion immer falsche Ergebnisse liefert über ein Problem bei einem Query mit Fließkommazahlen gestoßen.

Und zwar habe ich folgende Datenbank:
https://www.sendspace.com/file/i65iem

Die Spalte rating ist dabei vom Datentyp float.

Folgende Abfrage liefert den Wert 0:
Code:
SELECT COUNT(*) FROM `vogoo_ratings` WHERE `rating`=0.2

Und folgende Abfrage liefert den richtigen Wert:
Code:
SELECT COUNT(*) FROM `vogoo_ratings` WHERE `rating`>=0.2 AND `rating`<=0.21

Scheinbar speichert MySql die Daten nicht ganz so genau.

Nur kann ich im PHP Skript nicht standardmäßig 0,1 draufaddieren und daraus die Abfrage machen, da die ratings auch 0.02 sein könnten.

Welche Möglichkeit gibt es noch ohne die Struktur der DB zu ändern, die dieses Problem lösen würde?
 
nicht alle Fließkommazahlen können genau in dem Arbeitsspeicher abgebildet werden, aus dem Grund macht man auch keine Gleichheitsvergleiche auf Fließkommazahlen sondern prüft, ob es eine Fließkommazahl gibt die in der Toleranzgrenze von z.B. 0.0001 der gesuchten Fließkommazahl liegt.
 
Ok ich hab jetzt doch selber noch eine Lösung gefunden:

Code:
SELECT COUNT(*) FROM vogoo_ratings WHERE ROUND(`rating`, 1)=0.2

Mal sehen wie effektiv das auf Dauer ist immer zu runden.