我有一个名为'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有关的问题。我怎么能解决这个问题???
答案 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。