考虑到应纳税额(应纳税)、天数和利率,我必须计算所应用的利息(使用复利公式),但DB2 V12(Z/OS)应用的浮点数和舍入有问题。
(Note:DB2 LUW上的相同语句不会给我带来问题)
我期望的利息值是17,84欧元,而我得到17,86欧元
我用的是这样一句话:
SELECT CAST(CAST(RATEABLE AS DECFLOAT)
* ( 1 - ( POWER ( ( 1 + CAST(RATE AS DECFLOAT) / 100 ),
( -1 * CAST(NUMBER_DAYS AS DECFLOAT) / CAST(DIVISOR AS DECFLOAT) )
)
)
) AS DECIMAL(18, 2)
) AS PAYMENT_INTEREST
FROM (
--- I simulate accessing my DB2 table.
SELECT CAST(92247.38 AS DECIMAL(18, 2)) AS RATEABLE,
CAST(0.249000 AS DECIMAL(12, 6)) AS RATE,
INTEGER(28) AS NUMBER_DAYS,
INTEGER(360) AS DIVISOR
FROM SYSIBM.SYSDUMMY1
) AS TEMP
如果我将“RATE”字段定义为DEC(12,3),则计算是正确的,但显然我无法使用更多的小数来管理更多的汇率。
现在,我错过了什么?
- 谢谢-谢谢
1条答案
按热度按时间x9ybnkn61#
不要使用浮点数据类型,因为它们会给你带来这个问题。只要将你的字段定义为小数,并有足够的小数点来保存你需要它们保存的数据。如果你需要以较低的精度显示它们,你可以在你的查询中对它们进行舍入