文档首页/ 云数据库 GaussDB/ 开发指南(分布式_V2.0-10.x)/ FAQ-非透明多写/ 其他/ 如何解决power()函数计算结果数值太大时的误差?
更新时间:2026-07-28 GMT+08:00
分享

如何解决power()函数计算结果数值太大时的误差?

答:一般power()函数计算结果大数值时有误差,例如2的60次方,准确值为1152921504606846976,使用SELECT power(2,60)的值为1.15292150460685e+18存在误差。具体解决办法如下:
gaussdb=# SELECT power(2,60);
        power         
----------------------
 1.15292150460685e+18
(1 row)

--如下查询结果表示:两个double precision类型的入参时返回值也是double precision类型,该类型精确到小数点后16位。
gaussdb=# \df power;
                                                    List of functions
   Schema   | Name  | Result data type |        Argument data types         |  Type  | fencedmode | propackage | prokind 
------------+-------+------------------+------------------------------------+--------+------------+------------+---------
 pg_catalog | power | double precision | double precision, double precision | normal | f          | f          | f
 pg_catalog | power | numeric          | numeric, numeric                   | normal | f          | f          | f
(2 rows)

--使用如下方式查询。
gaussdb=# SELECT power(2::numeric,60::numeric);
                power                 
--------------------------------------
 1152921504606846976.0000000000000000
(1 row)

--使用round()函数取消小数点。
gaussdb=# SELECT round(power(2::numeric,60::numeric),0);
        round        
---------------------
 1152921504606846976
(1 row)

相关文档