跑步
PostgreSQL 11.4(Debian 11.4-1.pgdg90+1)在x86_64-pc-linux-gnu上,
由gcc(Debian 6.3.0-18+deb9u1)6.3.0 20170516编译,64位
我试过这个说法:

SELECT CAST (2^63-1 as bigint);

但收到意外错误消息:
bigint超出范围
奇怪的是,如果我只是用它的整数等价物替换指数形式:
SELECT CAST (9223372036854775807 as bigint)

它按预期工作。我想只是我没有正确地理解事情。FWIW指数表示法中我能使用的最大数字是:
SELECT CAST (2^63-513 as bigint);

任何更大的错误都是一样的。
关于PostgreSQL的指数化,我遗漏了什么?或者,它是被转换成浮点数还是倒数,我看到了舍入/截断错误?

最佳答案

是的,它被转换成双精度,所以你看到了这些舍入误差:

select pg_typeof(2^63);
    pg_typeof
------------------
 double precision

select pg_typeof(2^63-1);
    pg_typeof
------------------
 double precision


如果以数字开头,则有效:

select (2::numeric^63-1)::bigint;
        int8
---------------------
 9223372036854775807

关于postgresql - PostgreSQL bigint太大了吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57364079/

10-15 11:08