Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [solved] MySQL, pole typu float oraz klausula WHERE
KirkoR
post
Post #1





Grupa: Zarejestrowani
Postów: 118
Pomógł: 0
Dołączył: 14.02.2004
Skąd: Warszawa

Ostrzeżenie: (10%)
X----


Witam, w tabeli InnoDB z kodowanie utf8 mam pole typu float.
Kod:
  1. WHERE float_field = '2.99'

nie działa
natomiast
  1. WHERE float_field LIKE '2.99'

Działa dobrze.
Dlaczego tak się dzieje, i co zrobić aby używać = a nie LIKE.

Ten post edytował KirkoR 23.04.2007, 13:25:00
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 3)
php programmer
post
Post #2





Grupa: Zarejestrowani
Postów: 1 045
Pomógł: 5
Dołączył: 8.11.2004
Skąd: trójmiasto

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


float to nie string wiec powinno się podawać bez "uszu", tzn
  1. WHERE float_field = 2.99


Ten post edytował php programmer 23.04.2007, 11:45:05
Go to the top of the page
+Quote Post
KirkoR
post
Post #3





Grupa: Zarejestrowani
Postów: 118
Pomógł: 0
Dołączył: 14.02.2004
Skąd: Warszawa

Ostrzeżenie: (10%)
X----


też nie działa (IMG:http://forum.php.pl/style_emoticons/default/sad.gif)

Rozwiazaniem jest:
  1. WHERE CONVERT(TABLE.FLOAT_FIELD, DECIMAL) = 2.99
Go to the top of the page
+Quote Post
Sedziwoj
post
Post #4





Grupa: Zarejestrowani
Postów: 793
Pomógł: 32
Dołączył: 23.11.2006
Skąd: Warszawa

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


Powodem jest sposób w jaki jest zapisywana liczba w formacie float.
Dlatego nie powinno się jej używać do reprezentacji np. pieniędzy bo przy dużej liczbie operacji mogą wyjść jakieś błędy, typu 0,01 + 0,02 = 0,04 (oczywiście to tylko nierzeczywisty przykład, bo przy tak małej liczbie operacji (jednej) raczej będzie ok.)
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: 24.08.2025 - 13:30