5

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

我正在使用mysql 蟾蜍。下面是表格的代码:

CREATE TABLE `tblGeoCodes` (
  `recNo` int(11) NOT NULL AUTO_INCREMENT,
  `longLocation` float(30,2) DEFAULT NULL,
  `latLocation` float(30,2) DEFAULT NULL 
4

4 回答 4

13

您的实施存在两个问题。

值都被舍入到 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,14) DEFAULT NULL,
    ->   `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)
于 2013-04-08T18:35:18.627 回答
5

,2in float(30,2)代表 2 位小数。我使用float(10,6)它,因为这足以容纳坐标

于 2013-04-08T18:37:25.887 回答
0

我建议转换为 MISAM 以利用 GS ​​I。它更适合该目的并且应该表现更好。

然而,正如已经建议的那样,提高浮点字段的精度可能是一个更简单的解决方案。由于您已将问题标记为 google-maps releted,因此我还建议您在 Google 的开发站点上使用本教程。

于 2013-04-08T18:28:29.537 回答
0

请记住,FLOAT(10,6)这没有任何意义,这为整数部分保留了 4 位数字。

就个人而言,我更喜欢,DOUBLE(9,6)但您可能会使用它FLOAT来节省 4 个额外的字节。

于 2013-05-09T09:52:23.347 回答