在原则2中指定十进制字段类型时,缩放和精度意味着什么?

我正在为 Symfony2应用程序创建一个十进制字段来保存 Doctrine2中的一个财务数字。

目前的情况是这样的:

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

当我输入一个值并将该值保存到数据库时,它被四舍五入为一个整数。我猜我需要设置这个领域的精度和比例类型,但我需要有人来解释他们到底是做什么的?

Doctrine2文档表示:

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

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

但这并不能说明什么。

我猜精确度是小数点后的位数,所以我假设应该是2,但是比例是什么呢?规模是重要的数字吗?

我的领域声明应该是这样吗? :-

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

Doctrine 使用类似于 SQL 类型的类型。

摘自 MySQL 文档:

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

薪金小数(5,2)

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

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

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

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

我知道这个很老,但是为什么程序员仍然使用十进制... 只是使用64位整数,并定义值为美分(或数千) ,而不是整数。一切都简单化了。

也就是说,不存储123.45,而是存储12345,对整数进行所有计算,并在需要时将值显示给用户为123.45

另外,至少现在没有人有2305843009213693952美分或23.058.430.092.136.939,52个全部的账户。