Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Warum gibt diese SQL-Abfrage keine Ergebnisse zurück, die Gleitkommazahlen vergleichen?

Es ist im Allgemeinen keine gute Idee, Fließkommazahlen mit = zu vergleichen Gleichheitsoperator.

Für Ihre Bewerbung müssen Sie überlegen, wie nah die Antwort sein soll.

1 Grad sind etwa 112 km und 0,00001 Grad sind etwa 1,1 Meter (am Äquator). Möchten Sie wirklich, dass Ihre Anwendung "nicht gleich" sagt, wenn sich zwei Punkte um 0,00000001 Grad =1 mm unterscheiden?

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

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

Dadurch werden Punkte zurückgegeben, an denen Längengrad innerhalb von @epsilon liegt Grad des gewünschten Wertes. Sie sollten einen für Ihre Anwendung geeigneten Wert für Epsilon wählen.