Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Błąd operatora '=' ?
Forum PHP.pl > Forum > Bazy danych > MySQL
zordon
Witam,

napisałem sobie skrypcik w php listujący wg zadanych kryteriów (>, <, = itp)dane z bazy. Wszystko śmiga cacy, za wyjątkiem operatora '='.

Potestowałem sobie w konsoli i zgłupiałem. wezmy takie zupelnie hipotetyczne zapytanie: select * from bilans where zzz=0.34;

wynikiem zapytania empty set mimo, iż dobrze wiem, że w kolumnie zzz są takie właśnie wartości.

Co ciekawe, zapytanie select * from bilans where zzz>0.33 and zzz<0.35; zwróci mi oczywiście wszystkie rekordy z wartością 0.34 właśnie.

Typ kolumny to float, dane były konwertowane z pliku dbf, ale tam dane również były podawane z precyzją 2 miejsc po przecinku...

Późno jest a ja jestem zmęczony ale chyba jeszcze do reszty nie zdurniałem?

Spotkał się ktoś z podobnym problemem? Czym to jest spowodowane i co ważniejsze - jak to usunąć??
dr_bonzo
Dane typu float/double NIE zawsze (a praktycznie nigdy) nie sa dokladnie takie na jakie wygladaja (google: system binarny ieee754) - dla tego 0.34 tak naprawde to 0.34000000001 albo cos podobnego.

Przekonwertuj je do typu decimal, albo porownuj z delta (czy x jest w przedziale > 0.34 - DELTA i < 0.34 + DELTA)
zordon
Po przekonwertowaniu pól na decimal porównywanie faktycznie działa. Dzięki!
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.