postgresql - Postgres 大数值运算
问题描述
我正在尝试对大型数字字段(例如 2^89)进行一些操作。
Postgres 数字数据类型可以在小数点左侧存储 131072,在小数点右侧存储 16383 位。
我尝试了这样的事情并且它奏效了:
select 0.037037037037037037037037037037037037037037037037037037037037037037037037037037037037037037037037037::numeric;
但是当我放置一些运算符时,它会在 14 位数字后四舍五入。
select (2^89)::numeric(40,0);
numeric
-----------------------------
618970019642690000000000000
(1 row)
我知道其他地方的价值是:
>>> 2**89
618970019642690137449562112
为什么会出现这种奇怪的行为。它不允许我将超过 14 位数字的值输入到数据库中。
insert into x select (2^89-1)::numeric;
select * from x;
x
-----------------------------
618970019642690000000000000
(1 row)
有什么办法可以规避这一点。
提前致谢。
bb23850
解决方案
您不应该转换结果,而是转换操作的一部分,以明确这是一个numeric
操作,而不是一个integer
操作:
select (2^89::numeric)
否则 PostgreSQL 采用2
和89
作为类型integer
。在这种情况下,结果也是 type integer
,它不是那个大小的精确值。您的演员表是该不准确结果的演员表,因此无法正常工作。
推荐阅读
- python - 如何在 Python 中获得以下输出并在输入中添加换行符?
- button - 计数按钮按下 javafx
- reactjs - React - 使用链接并将数据传递给新组件
- python - python脚本的repin函数不起作用
- azure-timeseries-insights - Azure TSI aggregateSeries 查询返回绘图不一致的数据
- nginx - 阻止直接 haproxy ip
- javascript - javascript中的javascript输入问题
- python - 熊猫弃用警告 to_dict()
- java - Spring Boot + Elastic Search + 排除类字段
- ios - 带有 React Native 的 iOS 模拟器上无法识别的字体系列“Saman”