Warum liefert diese SQL-Abfrage keine Ergebnisse, die Fließkommazahlen vergleichen?

8

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 ?

    
Lille_skutt 12.01.2012, 17:27
quelle

3 Antworten

9

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.

    
Ben 12.01.2012, 17:33
quelle
4
Wrikken 12.01.2012 17:33
quelle
0

Konvertieren Float in Dezimal für Vergleich. Ich hatte das gleiche Problem und löste es so:

%Vor%

Schauen Sie sich die ersten 3 Zeilen nach der WHERE-Clausus an. Hoffe es hilft.

    
Wasyster 05.11.2017 11:27
quelle

Tags und Links