Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Błąd operatora '=' ?
zordon
post
Post #1





Grupa: Zarejestrowani
Postów: 358
Pomógł: 78
Dołączył: 4.11.2008
Skąd: Kraków

Ostrzeżenie: (0%)
-----


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ąć??
Go to the top of the page
+Quote Post
dr_bonzo
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

Ostrzeżenie: (0%)
-----


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)
Go to the top of the page
+Quote Post
zordon
post
Post #3





Grupa: Zarejestrowani
Postów: 358
Pomógł: 78
Dołączył: 4.11.2008
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Po przekonwertowaniu pól na decimal porównywanie faktycznie działa. Dzięki!
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 22:36