Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Por que essa consulta sql não retorna nenhum resultado comparando números de ponto flutuante?


Geralmente não é uma boa ideia comparar números de ponto flutuante com = operador igual.

Para sua aplicação, você precisa considerar o quão perto deseja que a resposta seja.

1 grau é cerca de 112 km e 0,00001 grau é cerca de 1,1 metros (no equador). Você realmente quer que seu aplicativo diga "não é igual" se dois pontos forem diferentes em 0,00000001 graus =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

Isso retornará pontos onde lngitude está dentro de @epsilon graus do valor desejado. Você deve escolher um valor para epsilon que seja apropriado para sua aplicação.