我有一个数字: 0.01744649 ,我需要从后面绕圈。我想得到一个结果: 0.018
P.S。 我已经尝试了所有文档的可能性:enter link description here - 每次我得到不同的结果但不是我想要的结果。
答案 0 :(得分:2)
使用ceil:
SELECT ceil(0.01744649 * 1000) / 1000
如果您需要一次舍入一位数,请执行以下操作:0.01744649
- > 0.0174465
- > 0.017447
- > 0.01745
- > 0.0175
- > 0.018
,这里的功能是:
CREATE OR REPLACE FUNCTION public.rounding(_value numeric, _precision int)
RETURNS numeric AS
$BODY$
DECLARE
tmp_val numeric;
i integer;
BEGIN
tmp_val = _value;
i = 10;
WHILE i >= _precision LOOP
tmp_val = round(tmp_val, i);
i = i - 1;
END LOOP;
RETURN tmp_val;
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
用法:
SELECT public.rounding(0.01744649, 3);
0.018
SELECT public.rounding(0.01744444, 3);
0.017
答案 1 :(得分:1)
您需要在舍入到3位小数之前添加5/10000。
select round(0.01744649+0.0005,3);
round
-------
0.018
(1 row)
答案 2 :(得分:0)
如果您尝试将其舍入到第3个小数,请尝试将其乘以1000,然后将其再次除以1000。这应该产生你期待的结果。
答案 3 :(得分:0)
create or replace function dugi_round (
p_fl numeric,
p_pr int,
p_depth int default 0
) returns numeric language plpgsql as $$
declare n_fl numeric;
begin
n_fl := p_fl * 10.0;
-- raise notice 'we have now %, %',n_fl,p_pr;
if floor(n_fl) < n_fl then
-- raise notice 'remaining diff % - % = %',
-- n_fl, floor(n_fl), n_fl - floor(n_fl);
n_fl := dugi_round(n_fl, p_pr, p_depth + 1);
end if;
if (p_depth > p_pr) then
n_fl := round(n_fl / 10);
else
n_fl := round(n_fl / 10, p_pr);
end if;
-- raise notice 'returning %, %', n_fl, p_pr;
return n_fl;
end;
$$
;
ghp=# select dugi_round(0.01744649, 3);
dugi_round
------------
0.018
(1 row)