Ich habe dies in einer MySQL-Tabelle:
id
und bolag_id
sind int
. lat
und lngitude
sind double
.
Wenn ich die Spalte lngitude
verwende, werden keine Ergebnisse zurückgegeben:
lngitude
Abfrage: SELECT * FROM location_forslag WHERE
lngitude = 13.8461208
Wenn ich jedoch die Spalte lat
verwende, gibt Ergebnisse zurück:
lat
Abfrage: SELECT * FROM location_forslag WHERE
lat = 58.3902782
Was ist das Problem mit der Spalte lngitude
?
Es ist im Allgemeinen keine gute Idee, Gleitkommazahlen mit dem Operator =
gleich zu vergleichen.
Für Ihre Anwendung müssen Sie überlegen, wie nahe die Antwort sein soll.
1 Grad ist etwa 112 km und 0,00001 Grad ist etwa 1,1 Meter (am Äquator). Möchten Sie wirklich, dass Ihre Anwendung "nicht gleich" sagt, wenn zwei Punkte um 0,00000001 Grad = 1mm abweichen?
%Vor% Dadurch werden Punkte zurückgegeben, an denen die Länge innerhalb von @epsilon
Grad des gewünschten Werts liegt.
Sie sollten einen Wert für Epsilon wählen, der für Ihre Anwendung geeignet ist.