我正在创建一个十进制字段来为我的Symfony2应用程序保存Doctrine2中的财务数据.
目前,它看起来像这样:
/**
* @ORM\Column(type="decimal")
*/
protected $rate;
Run Code Online (Sandbox Code Playgroud)
当我输入一个值并且所述值持久保存到数据库时,它被舍入为整数.我猜我需要为该字段设置精度和比例类型,但我需要有人来解释他们究竟做了什么?
该Doctrine2文档说:
precision:十进制(精确数字)列的精度(仅适用于十进制列)
scale:十进制(精确数字)列的比例(仅适用于十进制列)
但这并没有告诉我太多.
我猜测精度是要舍入的小数位数,所以我假设应该是2,但是什么是比例?规模是重要数字吗?
我的现场宣言应该是这样吗?: -
/**
* @ORM\Column(type="decimal", precision=2, scale=4)
*/
protected $rate;
Run Code Online (Sandbox Code Playgroud) 编辑:这只是在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;
}
Run Code Online (Sandbox Code Playgroud)
当我从我的代码中设置该值时,该值将正确写入数据库.但是,这是我的问题,当我得到值(通过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
Run Code Online (Sandbox Code Playgroud)
我当然想要所有数字,而不仅仅是14. MySQL中的字段声明如下:
someValue decimal(40,30) NOT NULL,
当我使用原始PHP和mysql_query()获取值时,它会正确返回.
编辑:似乎问题是Doctrine返回一个浮点数:
["someValue":protected]=> float(234567890.01235)
Run Code Online (Sandbox Code Playgroud)
怎么了,接下来应该检查什么,如何解决,有什么线索?