在Doctrine 2中指定十进制字段类型时,缩放和精度是什么意思?

Ano*_*ous 60 database orm types symfony doctrine-orm

我正在创建一个十进制字段来为我的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)

Lou*_*eau 102

Doctrine使用类似于SQL类型的类型.十进制恰好是固定的精度类型(与浮点数不同).

取自MySQL文档:

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

工资DECIMAL(5,2)

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

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


gig*_*gsy 28

快速说明一下:我必须从属性精度和比例中删除引号,如下所示:

@ORM\Column(type="decimal", precision=8, scale=2)
Run Code Online (Sandbox Code Playgroud)


som*_*aks 11

@Column(type="decimal", precision=5, scale=2) means 123.45
Run Code Online (Sandbox Code Playgroud)