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

如何在PostgreSQL中避免浮点运算溢出并返回Infinity而非报错

PostgreSQL 浮点运算溢出返回无穷值的实现方案

PostgreSQL 默认对 float/float8 类型的算术溢出会直接抛出错误,不会静默返回 Infinity,最通用兼容的实现方式为封装自定义安全运算函数,捕获溢出异常后返回对应无穷值:

步骤1:创建自定义安全乘法函数

CREATE OR REPLACE FUNCTION safe_float_multiply(a float8, b float8)
RETURNS float8 AS $$
BEGIN
    RETURN a * b;
EXCEPTION
    -- 捕获数值溢出错误
    WHEN numeric_value_out_of_range THEN
        -- 同号相乘返回正无穷,异号相乘返回负无穷
        RETURN CASE WHEN sign(a) = sign(b) THEN 'Infinity'::float8 ELSE '-Infinity'::float8 END;
END;
$$ LANGUAGE plpgsql IMMUTABLE;

步骤2:调用函数执行运算

SELECT safe_float_multiply(1E300::float, 1E300::float);

执行后即可得到预期返回结果 Infinity。
如果需要适配加法、减法、除法等其他运算,参照上述逻辑封装对应函数即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 23:36:03