cakephp 模型保存浮点值的问题

Posted

技术标签:

【中文标题】cakephp 模型保存浮点值的问题【英文标题】:cakephp model save issue with float values 【发布时间】:2011-10-25 05:37:22 【问题描述】:

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

+------------------+--------------+-----+-- +---------+----------------+
|领域 |类型 |空 |钥匙 |默认 |额外 |
+------------------+-----------+------+------+-- -------+----------------+
|编号 |整数(11) |否 |优先级 |空 |自动增量 |
|地名 | varchar(120) |否 | |空 | |
|纬度 |浮动(10,6) |否 | |空 | |
|经度 |浮动(10,6) |否 | |空 | |
+------------------+-----------+------+------+-- -------+----------------+

现在,当我尝试通过 cakephp 中的 Model 向表中插入值时,比如

[位置] => 数组
        (
            [place_name] => St Francis De Sales
            [纬度] => 42.381486
            [经度] => -71.066718
        )

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

插入“地点”
(`place_name`, `latitude`, `longitude`)
值('St Francis De Sales',42.3815,-71.0667)

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

+-------------------+-----------+-- ----------+
|地名 |纬度 |经度 |
+-------------------+------------+-- --------+
|圣弗朗西斯德销售教堂 | 42.379501 | -71.062798 |
+-------------------+------------+-- --------+

直接从 mysql 控制台插入值没有问题。所以,我想这是一个与 cakephp 相关的问题。我该如何解决这个...??

【问题讨论】:

您是否尝试过打开 CakePHP 调试信息并查看实际的插入查询是什么? @Xint0 是的,查询类似于 INSERT INTO places (place_name, latitude, longitude) VALUES ('St Francis De Sales', 42.3815, -71.0667) 它已经在插入表格之前对那里的值进行四舍五入。 执行debug($this->data); exit; 之前 $this->Model->save() 发生;所有数据都按原样显示了吗? @Ross 我也试过了.. $this->data 保持不变。此更改发生在运行插入查询之前。 【参考方案1】:

问题在于 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。

【讨论】:

我正在使用 Cakephp 2.91 并面临同样的问题。当我保存一个浮点数谎言'103.813595'时,它将在mysql中保存为'103.813599'。该表是一个浮点数(10,6)。如何解决这个问题?

以上是关于cakephp 模型保存浮点值的问题的主要内容,如果未能解决你的问题,请参考以下文章

如何在模型中保存 cakephp 对象

CakePHP- 保存相关模型数据

CakePHP 3:保存关联模型失败

CakePHP 2.1 - 模型关联 - 保存和查找

cakePHP 保存到多个模型

CakePHP:保存从 MySQL 视图加载的模型