我在我的一个实体中使用此列:
/**
* @var float
* @ORM\Column(type="decimal", precision=20, scale=2)
*/
public $value;
根据Doctrine docs,decimal
类型作为string
返回给PHP,但我将其用作float
。我应该使用@var float
对其进行键入,还是@var string
正确?
无论如何,如果我将此变量用于算术计算,例如。
$object->value + $otherobject->value
我冒得不受欢迎的行为(比如只添加整数部分)?
答案 0 :(得分:0)
我会这样做:
/**
* @var float
*
* @ORM\Column(type="float", precision=20, scale=2)
*/
public $value;
答案 1 :(得分:0)
使用Symfony 4提供的命令行工具生成实体,可以像这样生成decimal
类型的字段:
New property name (press <return> to stop adding fields):
> percent
Field type (enter ? to see all types) [string]:
> decimal
Precision (total number of digits stored: 100.00 would be 5) [10]:
> 5
Scale (number of decimals to store: 100.00 would be 2) [0]:
> 4
这导致以下属性和getter / setter方法:
<?php
// ...
/**
* @ORM\Column(type="decimal", precision=5, scale=4)
*/
private $percent;
public function getPercent()
{
return $this->percent;
}
public function setPercent($percent): self
{
$this->percent = $percent;
return $this;
}
因此,默认情况下,Doctrine不生成类型提示而生成getter / setter方法。
getter将返回string
,而setter则需要一个double
类型的参数(它只是float
的同义词)。
因此,您无法执行以下操作:
/**
* @var float
*/
private $value;
由于该值将以字符串形式返回,因此您不应该像问题中那样进行计算,但要注意以前的转换。
编辑:
使用string
或float
进行类型提示的另一种方法是外部库PHP decimal。
您可以使用以下命令install:
composer require php-decimal/php-decimal