mysql数据库将尾随0添加到十进制

时间:2013-10-01 21:23:29

标签: php mysql phpmyadmin gis latitude-longitude

我有一个存储纬度和经度的数据库。我将纬度列设置为十进制9,7,将经度设置为十进制10,7。当纬度为9个数字长时,它工作正常,问题是如果纬度是8个数字长,则在坐标上添加尾随0。有没有办法在phpmyadmin中防止这种情况?或者我应该在将它们添加到数据库之前用PHP舍入小数?

1 个答案:

答案 0 :(得分:0)

纬度和经度本身就是近似值,尤其是那些来自GPS测量的值。这些是模拟量,在数字上测量的是不精确的量。

您无法比较其中两个值的相等性,并希望事情正常工作;近似值不起作用。它们本质上有点模糊。

如果你想知道zip.long / zip.lat是否等于long / lat,你需要使用类似这样的SQL表达式。

 WHERE zip.long BETWEEN long - epsilon AND long + epsilon
   AND zip.lat  BETWEEN lat  - epsilon AND lat  + epsilon

如果您正在寻找10米精度,epsilon的值应为0.00001268(1.268e-05)。我们知道这一点,因为纬度是六十海里,并且很容易将海里转换为米。

关于尾随零的问题暗示您正在使用字符串比较来匹配纬度和经度。也就是说,相比之下,比使用数字相等来比较那样的数字更具欺骗性。

顺便说一句,FLOAT数据类型(32位IEEE 754浮点)对于纬度/经度而言是非常精确的,除非您是测量员并且知道Lambert和UTM投影之间的区别