Проблема сохранения модели CakePHP со значениями типа float - PullRequest
1 голос
/ 25 октября 2011

У меня есть таблица «Места» для сохранения информации о местах.

+------------------+--------------+------+-----+---------+----------------+
| 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 Ответ

2 голосов
/ 25 октября 2011

Проблема заключается в том, что 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, выпущенная 15 октября 2011 года).

Таким образом, вы сможете решить свою проблему, просто обновившись до версии 1.3.13.

Если обновление по какой-либо причине невозможно, вы также можете подумать о том, действительно ли необходимо сохранять значение как число с плавающей запятой. Если вам не нужны никакие специальные вычисления для значений lat / long и вам не нужно сортировать записи по lat / long, вы можете вместо этого сохранить значения как varchar.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...