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

时间:2013-02-18 16:13:06

标签: database symfony orm types doctrine-orm

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

目前,它看起来像这样:

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

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

Doctrine2 documentation说:

  

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

     

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

但这并没有告诉我太多。

我猜测精度是要舍入到的小数位数,所以我假设应该是2,但是什么是比例?规模是重要数字吗?

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

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

5 个答案:

答案 0 :(得分:97)

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

取自MySQL documentation

  

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

     

薪水DECIMAL(5,2)

     

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

     

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

答案 1 :(得分:28)

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

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

答案 2 :(得分:10)

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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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

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

P.S。至少到目前为止,没有人拥有2305843009213693952美分或23.058.430.092.136.939,52整个帐户。