我正在编写一个用户定义的函数,并且在进行简单的算术时遇到了很多麻烦:
...
DECLARE
alpha numeric;
BEGIN
RAISE NOTICE 'alpha: %', alpha; --alpha is NULL here
RAISE NOTICE 'period: %', period; --period is an integer function param, it's 10
alpha := 2/(period + 1);
RAISE NOTICE 'alpha: %', alpha; --alpha is zero (!) here
...
END;
但如果我分两步计算alpha,它就能正常工作:
...
DECLARE
alpha numeric;
BEGIN
RAISE NOTICE 'period: %', period; --period is 10
alpha := period + 1; --alpha is 11 here
alpha := 2/alpha; --alpha is 0.1818...
...
END;
这是怎么回事? alpha是否在第一个表达式中转换为整数并舍入为零?
答案 0 :(得分:1)
我怀疑问题是Postgres做了整数除法。所以,只需添加一个小数点:
alpha := 2.0/(period + 1);