symfony 在教义2中指定小数字段类型时,小数位数和精度意味着什么?

wswtfjt7  于 12个月前  发布在  其他
关注(0)|答案(6)|浏览(102)

我正在为我的Symfony 2应用程序在Doctrine2中创建一个十进制字段来保存财务数字。
目前,它看起来像这样:

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

当我输入一个值并说值被持久化到数据库时,它被四舍五入为整数。我猜我需要设置字段的精度和小数位数类型,但我需要有人来解释它们到底是做什么的?
Doctrine2文档说:
precision:小数(精确数值)列的精度(仅适用于小数列)
scale:小数(精确数值)列的小数位数(仅小数列的小数位数)
但这并没有告诉我很多。
我猜精度是要舍入到的小数位数,所以我假设它应该是2,但什么是scale?scale是有效数字吗?
我的字段声明应该是这样的吗?

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

abithluo1#

Doctrine使用类似于SQL类型的类型。Decompression恰好是一个固定精度的类型(不像floats)。
引用自MySQL documentation
在DECIMAL列声明中,可以(通常是)指定精度和小数位数;例如:
工资DECIMAL(5,2)
在此示例中,5是精度,2是小数位数。精度表示为值存储的有效位数,小数位数表示小数点后可以存储的位数。
标准SQL要求DECIMAL(5,2)能够存储任何五位数和两位小数的值,因此可以存储在salary列中的值范围为-999.99到999.99。

vuv7lop3

vuv7lop32#

简单说明一下:我必须从属性precision和scale中删除引号,如下所示:

@ORM\Column(type="decimal", precision=8, scale=2)
6ju8rftf

6ju8rftf3#

@Column(type="decimal", precision=5, scale=2) means 123.45
ig9co6j1

ig9co6j14#

我知道这是一个旧的,但为什么哦,为什么程序员仍然使用十进制.只是使用64位整数和定义的价值为美分(或千),而不是整数。一切都简化了。
也就是说,不存储123.45,只存储12345,而是对整数进行所有计算,并在需要时将值显示为123.45
至少现在没有人有23.058.430.092.136.939,52美分或23.058.430.092.136.939,52个完整的帐户。

n3h0vuf2

n3h0vuf25#

* @ORM\Column(type="decimal", precision=10, scale=2)
p4rjhz4m

p4rjhz4m6#

正如@Waldemar所说,只需使用整数/字符串以美分存储价格,并使用Money库来管理它,因为您需要将100美分/ 3人,Money有方法安全地完成。

相关问题