【问题标题】:cakephp model save issue with float valuescakephp 模型保存浮点值的问题
【发布时间】: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 保持不变。此更改发生在运行插入查询之前。

标签: mysql cakephp floating-point


【解决方案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)。如何解决这个问题?
猜你喜欢
  • 1970-01-01
  • 2011-09-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多