在Doctrine 2中指定小数字段类型时,小数位数和精度是什么意思?


67

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

当前,它看起来像这样:

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

当我输入一个值并将所述值持久保存到数据库时,将其四舍五入为整数。我猜想我需要为该字段设置精度和比例类型,但是我需要有人确切解释它们的作用?

Doctrine2文档说:

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

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

但这并不能告诉我很多。

我猜精度是要舍入的小数位数,因此我假设应该为2,但是小数位数是多少?规模是重要数字吗?

我的现场声明应该是这样吗?:-

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

Answers:


112

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

取自MySQL文档

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

工资DECIMAL(5,2)

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

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


30

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

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

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

1

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

即不是存储123.45而是存储12345,而是对整数进行所有计算,并在需要时以123.45的形式向用户显示该值

PS并且至少到目前为止,没有人拥有2305843009213693952美分或23.058.430.092.136.939,52整个帐户。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.