跑步
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/