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

如何向上舍入多位小数?PostgreSQL中0.01744649转0.018实现疑问

搞定PostgreSQL 9.1里的特殊向上舍入需求

我明白你遇到的问题了——想用PostgreSQL的数学函数把0.01744649向上舍入到0.018,但常规的ceil()或者round()都达不到预期,对吧?

先说说为啥常规方法不行:如果你直接用ceil(0.01744649::numeric * 1000) / 1000,得到的是0.017,因为0.01744649*1000=17.44649,ceil()只会取不小于它的最小整数也就是17,自然得不到你要的0.018。

那要实现把千分位直接进一位(不管后面的小数是多少),可以用这个方法:

SELECT (floor(0.01744649::numeric * 1000) + 1) / 1000 AS rounded_result;

执行这个语句就会返回0.018,正好符合你的预期。拆解一下逻辑:

  • 先把数值转成numeric类型(避免浮点数精度坑),乘以1000把千分位转成整数部分,得到17.44649
  • 用floor()取整得到17(也就是当前千分位的整数部分)
  • 加1强制进位到18
  • 再除以1000转回到三位小数,就是0.018

如果需要经常用这个逻辑,还可以封装成一个自定义函数,方便复用:

CREATE OR REPLACE FUNCTION round_up_to_decimals(num numeric, decimal_places int)
RETURNS numeric AS $$
BEGIN
    RETURN (floor(num * power(10, decimal_places)) + 1) / power(10, decimal_places);
END;
$$ LANGUAGE plpgsql IMMUTABLE;

调用的时候直接传数值和要保留的小数位数就行:

SELECT round_up_to_decimals(0.01744649, 3);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 09:00:00