【问题标题】:Doctrine 2, decimal can only contain 14 digits教义2,十进制只能包含14位数字
【发布时间】:2011-04-12 12:54:09
【问题描述】:

编辑:这刚刚被确认为 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)

出了什么问题,接下来我应该检查什么,如何修复,有什么线索吗?

【问题讨论】:

    标签: php doctrine-orm


    【解决方案1】:

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

    【讨论】:

    • 似乎确实返回了一个浮点数:["someValue":protected]=> float(234567890.01235) 是我做错了什么还是如何解决这个问题?
    • 如果您只是要显示数字,可能有一种方法可以让 Doctrine 将值作为字符串返回,但我不知道 Doctrine。如果您要进行数学运算,则可以将其四舍五入到已知的精度水平。 ini 文件中有一个设置,您可以更改以增加precision 的位数,但总有一个限制。可以在here找到更好的解释。
    • 已确认为错误,希望他们尽快修复,感谢您的意见!
    猜你喜欢
    • 1970-01-01
    • 2013-11-21
    • 1970-01-01
    • 1970-01-01
    • 2013-11-27
    • 1970-01-01
    • 2023-04-08
    • 2017-09-25
    • 2016-07-24
    相关资源
    最近更新 更多