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 INTOplaces
(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 模型保存浮点值的问题的主要内容,如果未能解决你的问题,请参考以下文章