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

PostgreSQL函数返回decimal(12,2)丢失小数点及末尾零问题求助

解决PostgreSQL函数返回decimal丢失小数位的问题

这个问题的核心是:虽然函数声明返回decimal(12,2)类型,但实际输出时,数值的小数位格式被自动省略了。可以通过两种方式解决:

方法一:显式格式化返回字符串

将函数的返回类型改为text,并在查询时用to_char函数强制格式化数值为保留两位小数的格式,确保输出始终包含小数点和末尾零:

create or replace function t.tst()
returns table (comm text)
language plpgsql
as
$$
begin
    return query
    select to_char(t.comm, 'FM9999999999.00') from pay.test t;
end;
$$

FM修饰符用于去除格式化后可能出现的前导空格,9999999999.00对应decimal(12,2)的位数,确保整数部分最多10位,小数部分固定两位。

方法二:强制保留数值类型的精度

如果需要返回数值类型而非字符串,可以在查询时显式转换为decimal(12,2),确保返回值的精度被严格保留:

create or replace function t.tst()
returns table (comm decimal(12,2))
language plpgsql
as
$$
begin
    return query
    select t.comm::decimal(12,2) from pay.test t;
end;
$$

这种方式下,数值的精度在数据库层面是完整的,若仍出现格式问题,可能是客户端工具的显示设置(比如某些工具会自动省略末尾的零),此时可以调整客户端的数值显示格式,或者改用方法一直接返回格式化后的字符串。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 17:40:30