You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL POWER函数不同参数类型计算结果差异问询

PostgreSQL中power函数的参数类型与结果差异

根据PostgreSQL官方文档,power函数存在两个接口:

power ( a numeric, b numeric ) → numeric
power ( a double precision, b double precision ) → double precision

测试不同参数类型组合时,出现了结果精度和数值的差异,测试SQL如下:

select ( power( (1 + 0.1689), (32/365.0) )) as power_base,                             -- 1.01377627781508836023 - numeric
       ( power( (1 + 0.1689) :: numeric(22,7)   , (32/365.0) :: double precision )) as power_num_dp,  -- 1.0137762778150883 - double precision
       ( power( (1 + 0.1689) :: double precision, (32/365.0) :: numeric(22,7)    )) as power_dp_num,  -- 1.0137762726135617 - double precision
       ( power( (1 + 0.1689) :: numeric(22,7)   , (32/365.0) :: numeric(22,7)    )) as power_num_num, -- 1.0137762726135616 - numeric
       ( power( (1 + 0.1689) :: double precision, (32/365.0) :: double precision )) as power_dp_dp;   -- 1.0137762778150883 - double precision

测试结果存在以下现象:

  • power_base的结果比显式指定numeric类型参数的power_num_num多4位小数,但通过pg_typeof()验证,power_base确实是numeric类型
  • 混合double precision与numeric类型参数时,power_dp_num的结果和power_num_num存在细微差异,推测是1.1689在自动转换为numeric类型时产生的舍入误差

该测试在PostgreSQL 13、16版本的PgAdmin和DBeaver工具中结果一致。

内容的提问来源于stack exchange,提问作者Ice2burn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 23:51:17