Mysql
 sql >> Base de données >  >> RDS >> Mysql

Pourquoi cette requête SQL ne renvoie-t-elle aucun résultat comparant les nombres à virgule flottante ?

Ce n'est généralement pas une bonne idée de comparer les nombres à virgule flottante avec = opérateur égal.

Pour votre application, vous devez considérer à quel point vous voulez que la réponse soit proche.

1 degré correspond à environ 112 km et 0,00001 degré correspond à environ 1,1 mètre (à l'équateur). Voulez-vous vraiment que votre application dise "différent" si deux points sont différents de 0,00000001 degré =1 mm ?

set @EPSLION = 0.00001  /* 1.1 metres at equator */

SELECT * FROM location_forslag 
WHERE `lngitude` >= 13.8461208 [email protected] 
AND `lngitude` <= 13.8461208 + @EPSILON

Cela renverra les points où lngitude est dans @epsilon degrés de la valeur souhaitée. Vous devez choisir une valeur pour epsilon adaptée à votre application.