75

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

目前,它看起来像这样:

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

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

Doctrine2 文档说:

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

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

但这并不能告诉我很多。

我猜精度是要四舍五入的小数位数,所以我假设应该是 2,但什么是比例?比例是有效数字吗?

我的字段声明应该是这样吗?:-

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

5 回答 5

121

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

取自MySQL 文档

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

工资 DECIMAL(5,2)

在此示例中,5 是精度,2 是比例。精度表示为值存储的有效位数,小数位数表示可以存储在小数点后的位数。

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

于 2013-02-18T16:17:09.987 回答
32

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

@ORM\Column(type="decimal", precision=8, scale=2)
于 2014-03-10T16:15:31.950 回答
23
@Column(type="decimal", precision=5, scale=2) means 123.45
于 2016-06-06T19:33:57.653 回答
1

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

即,不是存储 123.45,而是存储 12345,对整数进行所有计算,并在需要时将值作为 123.45 呈现给用户

PS 至少目前没有人在他们的账户上拥有 2305843009213693952 美分或 23.058.430.092.136.939,52 个整数。

于 2019-10-23T10:37:33.750 回答
0
 * @ORM\Column(type="decimal", precision=10, scale=2)
于 2014-09-27T14:53:01.807 回答