EDIT: Это было просто подтверждено как ошибка в Doctrine 2 http://www.doctrine-project.org/jira/browse/DDC-1112?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId= 15724 # action_15724
У меня есть объект Doctrine 2, и значение отображается таким образом (с обычным getter / setter):
/** * @Column(type="decimal", precision=40, scale=30) */ protected $someValue; /** * @return decimal */ public function getSomeValue() { return $this->someValue; } /** * @param decimal $someValue */ public function setSomeValue($someValue) { $this->someValue = $someValue; }
Когда я устанавливаю это значение из своего кода, значение записывается в базу данных правильно. Но, и это моя проблема, когда я получаю значение (через getter или \Doctrine\Common\Util\Debug::dump()
), он всегда дает мне число с максимум 14 цифрами, и оно округляет значение. Я прочитал запись по умолчанию findById()
.
eg: with value 1234567890.012345678901234567890123456789 I have 1234567890.0123 eg: with value 890.0123456789012345678901234567890123456 I have 890.01234567890
Я, конечно, хочу все цифры, а не только 14. Поле в MySQL объявлено следующим образом:
someValue decimal(40,30) NOT NULL,
Когда я получаю значение с необработанным PHP и mysql_query (), он возвращается правильно.
Изменить : похоже, проблема заключается в том, что Doctrine возвращает float:
["someValue":protected]=> float(234567890.01235)
Что случилось, что я должен проверить дальше, как исправить, какие-либо подсказки?
Похоже, что Doctrine2 возвращает значение float и работает с точностью с плавающей точкой, а mysql_query()
возвращает значение в виде строки. Вы можете сделать var_dump()
для каждой возвращаемой переменной и увидеть скалярный тип.