在Doctrine 2中指定小数字段types时,规模和精度是什么意思?

我创build了一个十进制字段,以在Doctrine2中为我的Symfony2应用程序保存财务数据。

目前看起来像这样:

/** * @ORM\Column(type="decimal") */ protected $rate; 

当我input一个值,并且所述值被持久化到数据库时,它被舍入到一个整数。 我猜我需要设置字段的精度和缩放types,但是我需要某个人来解释他们到底做了什么?

Doctrine2文档说:

精度:十进制(精确数字)列的精度(仅适用于小数列)

scale:小数(精确数字)列的比例(仅适用于小数列)

但是这并没有告诉我很多。

我猜精度是四舍五入的小数位数,所以我认为应该是2,但是什么是规模? 规模是有意义的数字?

我的领域宣言应该是这个吗? : –

 /** * @ORM\Column(type="decimal", precision=2, scale=4) */ protected $rate; 

Doctrine使用与SQLtypes类似的types。 十进制恰好是一个固定的精度types(不像浮点数)。

取自MySQL文档 :

在DECIMAL列声明中,精度和标度可以(通常是)指定的; 例如:

薪金DECIMAL(5,2)

在这个例子中,5是精度,2是尺度。 精度表示为值存储的有效位数,标度表示小数点后可存储的位数。

标准SQL要求DECIMAL(5,2)能够存储五位数和两位小数的任何值,因此可存储在薪金列中的值范围为-999.99至999.99。

只是一个简短的说明:我必须从属性精度和比例中删除引号,如下所示:

 @ORM\Column(type="decimal", precision=8, scale=2) 
 @Column(type="decimal", precision=5, scale=2) means 123.45 
  * @ORM\Column(type="decimal", precision=10, scale=2)