php - mysql数据库将尾随0添加到小数点

标签 php mysql phpmyadmin gis latitude-longitude

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

相关文章:

mysql - 删除太多 MySQL 数据库后如何修复 XAMPP?

php - 有没有更有效的方法来做到这一点

mysql - 使用 Zend Framework 更新数据库字段

php - mysql_fetch_array()/mysql_fetch_assoc()/mysql_fetch_row()/mysql_num_rows等…期望参数1为资源或结果

python - 我无法更改主 Django 项目设置文件

php - 尝试通过测验系统获得良好的订单

php - Yii- 如何在模块中添加 urlManager 规则?

php - 我的 ajax JSON 对象被识别为 "Undefined"

php - 有没有办法从我们的网站将视频上传到 youtube?

mysql - Xampp MySQL 错误