主义2,十进制只能包含14位数

时间:2011-04-12 12:54:10

标签: php doctrine-orm

编辑:这只是在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返回一个浮点数:

["someValue":protected]=> float(234567890.01235)

出了什么问题,接下来应该检查什么,如何解决,有什么线索?

1 个答案:

答案 0 :(得分:1)

听起来Doctrine2正在返回浮点值并且正在运行floating point precision,而mysql_query()将值作为字符串返回。您可以对每个返回的变量执行var_dump()并查看标量类型。