cakephp模型保存浮点值的问题

时间:2011-10-25 05:37:22

标签: mysql cakephp floating-point

我有一个名为'Places'的表来保存有关地点的信息

+------------------+--------------+------+-----+---------+----------------+
| Field            | Type         | Null | Key | Default | Extra          |
+------------------+--------------+------+-----+---------+----------------+
| id               | int(11)      | NO   | PRI | NULL    | auto_increment |
| place_name       | varchar(120) | NO   |     | NULL    |                |
| latitude         | float(10,6)  | NO   |     | NULL    |                |
| longitude        | float(10,6)  | NO   |     | NULL    |                |
+------------------+--------------+------+-----+---------+----------------+

现在,当我尝试通过cakephp中的模型将值插入表格时,比如

[Place] => Array
        (
            [place_name] => St Francis De Sales
            [latitude] => 42.381486
            [longitude] => -71.066718
        )

cakephp 执行的查询将值四舍五入到4个分数,我不希望发生这种情况..

INSERT INTO `places` 
(`place_name`, `latitude`, `longitude`) 
VALUES ('St Francis De Sales', 42.3815, -71.0667)

当我检查表格时,纬度和经度值将四舍五入或更改。

+-------------------------------+-----------+------------+
| place_name                    | latitude  | longitude  |
+-------------------------------+-----------+------------+
| Saint Francis De Sales Church | 42.379501 | -71.062798 |
+-------------------------------+-----------+------------+

我直接从mysql控制台插入值没有问题。所以,我想这是与cakephp有关的问题。我怎么能解决这个问题???

1 个答案:

答案 0 :(得分:2)

问题在于CakePHP使用sprintf准备插入查询的方式。

阅读这些错误报告以获取详细信息:

http://cakephp.lighthouseapp.com/projects/42648/tickets/2049-losing-accuracy-when-saving-a-decimal

http://cakephp.lighthouseapp.com/projects/42648/tickets/2069-precision-loss-when-saving-floats

好消息是,这个错误显然已经在版本1.3.13(最新版本的CakePHP 1.3,2011年10月15日发布)中得到修复。

因此,您应该只需升级到1.3.13即可解决问题。

如果无论出于何种原因升级都不是一个选项,您还可以考虑是否真的需要将值存储为浮点数。如果您不需要对lat / long值进行任何特殊计算,并且不需要按lat / long对记录进行排序,则可以将值存储为varchar。