我有一个存储纬度和经度的数据库。我将纬度列设置为十进制 9,7,将经度设置为十进制 10,7。当纬度为 9 个数字长时,它工作正常,问题是如果纬度为 8 个数字长,则会在坐标中添加尾随 0。 phpmyadmin 有办法防止这种情况吗?或者我应该在将小数添加到数据库之前用 php 将小数四舍五入?
最佳答案
纬度和经度本质上是近似值,尤其是那些从 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 浮点)对于纬度/经度来说具有足够的精度,除非您是测量员并且知道兰伯特和朗伯之间的区别UTM 投影。
关于php - mysql数据库将尾随0添加到小数点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19126204/