Tal como lo comenta gnzsoloyo, el detalle es que FLOAT es un tipo de datos de aproximación, no de precisión, checa este articulo:
http://blog.eleazan.net/2013/07/mysql-float-vs-decimal/
observa qué es lo que pasa con las búsquedas si se declara como tipo float:
Código MySQL:
Ver originalQuery OK, 0 rows affected (0.35 sec)
-> ('uno', 1),
-> ('dos', 2.2),
-> ('tres', -0.03),
-> ('cuatro', 10.0e2),
-> ('cinco', -10.0e-2);
Query OK, 5 rows affected (0.02 sec)
+--------+-------+
| Id | valor |
+--------+-------+
| uno | 1 |
| dos | 2.2 |
| tres | -0.03 |
| cuatro | 1000 |
| cinco | -0.1 |
+--------+-------+
+------+-------+
| Id | valor |
+------+-------+
| uno | 1 |
+------+-------+
+--------+-------+
| Id | valor |
+--------+-------+
| cuatro | 1000 |
+--------+-------+
Observa que siempre en los casos donde la cifra tienen un punto decimal, las consultas no "funcionan"... la explicación también te la da gnzsoloyo:
Cita: por lo que en realidad un 1538.56 no se almacena exactamente como tal, sino algo distinto...
si quieres evitar esto, puedes utilizar el tipo de datos DOUBLE:
Código MySQL:
Ver originalQuery OK, 0 rows affected (0.33 sec)
-> ('uno', 1),
-> ('dos', 2.2),
-> ('tres', -0.03),
-> ('cuatro', 10.0e2),
-> ('cinco', -10.0e-2);
Query OK, 5 rows affected (0.03 sec)
+--------+-------+
| Id | valor |
+--------+-------+
| uno | 1 |
| dos | 2.2 |
| tres | -0.03 |
| cuatro | 1000 |
| cinco | -0.1 |
+--------+-------+
+------+-------+
| Id | valor |
+------+-------+
| uno | 1 |
+------+-------+
+------+-------+
| Id | valor |
+------+-------+
| tres | -0.03 |
+------+-------+
+--------+-------+
| Id | valor |
+--------+-------+
| cuatro | 1000 |
+--------+-------+
+-------+-------+
| Id | valor |
+-------+-------+
| cinco | -0.1 |
+-------+-------+
Saludos
Leo.