为什么这个sql查询没有返回任何比较浮点数的结果?

Lil*_*utt 9 mysql double

我在mysql表中有这个:

在此输入图像描述

id并且bolag_idint.lat并且lngitudedouble.

如果我使用该lngitude列,则不返回任何结果:

lngitude查询: SELECT * FROM location_forslag WHERE lngitude= 13.8461208

但是,如果我使用该lat列,它返回结果:

lat查询: SELECT * FROM location_forslag WHERE lat= 58.3902782

lngitude栏有什么问题?

Ben*_*Ben 9

将浮点数与=等于运算符进行比较通常不是一个好主意.

对于您的应用程序,您需要考虑您希望答案的接近程度.

1度约112km,0.00001度约1.1米(赤道).如果两个点相差0.00000001度= 1mm,您真的希望您的应用程序说"不相等"吗?

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

SELECT * FROM location_forslag 
WHERE `lngitude` >= 13.8461208 -@EPSILON 
AND `lngitude` <= 13.8461208 + @EPSILON
Run Code Online (Sandbox Code Playgroud)

这将返回lngitude在@epsilon所需值的度数内的点.您应该选择适合您的应用程序的epsilon值.

  • 在这种情况下使用SQL BETWEEN关键字也不错(更易读的IMO). (2认同)