我编写了一个PostgreSQL函数来生成一个(最多)40位的随机数。
在运行该函数几次之后,似乎生成的数字只有其实际随机化的前导(最多)15位数(范围0-9)。以下数字均为零。
这对我来说非常出乎意料。这是由于我不知道的限制,例如在DECIMAL类型,OS中,还是在乘法运算中?
示例输出:
由于
CREATE OR REPLACE FUNCTION test_random()
RETURNS DECIMAL(40) AS
$BODY$
DECLARE
r DECIMAL(40) := 0;
pos INTEGER := NULL;
BEGIN
FOR pos IN 1..40 LOOP
r := r * 10 + FLOOR(random() * 10);
END LOOP;
RETURN r;
END
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
SELECT test_random();
答案 0 :(得分:3)
random
返回精度有限的double precision
。 numeric + double precision
会产生double precision
。为了避免将其转换为数字:
r := r * 10 + floor(random()::numeric * 10);