微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

MySql使用Float数据类型存储地理坐标

我有一个存储经度和纬度坐标的表格(谷歌地图)我将列定义为浮点数但是当我尝试插入一个值-61.45859899999999和10.28289时,它们将四舍五入为-61.46和10.30.如何修改列以保持数据不变.

我正在使用mysql toad. Under是表的代码

CREATE TABLE `tblGeoCodes` (
  `recNo` int(11) NOT NULL AUTO_INCREMENT,`longLocation` float(30,2) DEFAULT NULL,`latLocation` float(30,2) DEFAULT NULL 
最佳答案
您的实施有两个问题.

将值四舍五入为2位精度的原因是您明确将比例定义为2.

此外,FLOAT是MysqL中不精确的数据类型.

解决这两个问题,您应该使用具有适当精度和比例的DECIMAL数据类型.

例如,像这样:

CREATE TABLE `tblGeoCodes` (
  `recNo` int(11) NOT NULL AUTO_INCREMENT primary key,`longLocation` decimal(18,14) DEFAULT NULL,`latLocation` decimal(18,14) DEFAULT NULL
); 

例:

MysqL> CREATE TABLE `tblGeoCodes` (
    ->   `recNo` int(11) NOT NULL AUTO_INCREMENT primary key,->   `longLocation` decimal(18,->   `latLocation` decimal(18,14) DEFAULT NULL
    -> ); 
Query OK,0 rows affected (0.02 sec)

MysqL> 
MysqL> insert into tblGeoCodes (longLocation,latLocation) values(-61.45859899999999,10.28289);
Query OK,1 row affected (0.00 sec)

MysqL> 
MysqL> select * from tblGeoCodes;
+-------+--------------------+-------------------+
| recNo | longLocation       | latLocation       |
+-------+--------------------+-------------------+
|     1 | -61.45859899999999 | 10.28289000000000 |
+-------+--------------------+-------------------+
1 row in set (0.00 sec)

原文地址:https://www.jb51.cc/mysql/434235.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐