我正在为我的Symfony2应用程序创建一个十进制字段来保存Doctrine2中的财务数据。
目前,它看起来像这样:
/**
* @ORM\Column(type="decimal")
*/
protected $rate;
当我输入一个值并且所述值持久保存到数据库时,它被舍入为整数。我猜我需要为该字段设置精度和比例类型,但我需要有人来解释他们究竟做了什么?
precision:十进制(精确数字)列的精度(仅适用于十进制列)
scale:十进制(精确数字)列的比例(仅适用于十进制列)
但这并没有告诉我太多。
我猜测精度是要舍入到的小数位数,所以我假设应该是2,但是什么是比例?规模是重要数字吗?
我的现场声明应该是这样吗? : -
/**
* @ORM\Column(type="decimal", precision=2, scale=4)
*/
protected $rate;
答案 0 :(得分:97)
Doctrine使用类似于SQL类型的类型。十进制恰好是固定的精度类型(与浮点数不同)。
在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整个帐户。