在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)