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


mysql database adding trailing 0 to decimal

我有一个存储纬度和经度的数据库。 我将纬度列设置为十进制 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 投影之间的区别。