概述
Pgsql 自定义四舍六入函数
文章目录
- Pgsql 自定义四舍六入函数
- 前言
- 由于pgsql默认的修约函数 round(),使用的是四舍五入算法,故自定义函数实现四舍六入五成双的修约算法
前言
四舍六入五成双是一种比较精确比较科学的计数保留法,是一种数字修约规则。
具体规则:
(1)被修约的数字小于5时,该数字舍去;
(2)被修约的数字大于5时,则进位;
(3)被修约的数字等于5时,要看5前面的数字,若是奇数则进位,若是偶数则将5舍掉,即修约后末尾数字都成为偶数;若5的后面还有不为“0”的任何数,则此时无论5的前面是奇数还是偶数,均应进位。
由于pgsql默认的修约函数 round(),使用的是四舍五入算法,故自定义函数实现四舍六入五成双的修约算法
具体实现如下:
create or replace function bank_round(num numeric,i int)
returns numeric as
$$
declare numtemp numeric;
declare result_value numeric;
begin
if scale(num) <= i
then return num;
end if;
numtemp = abs(num) * power(10,i + 1);
case when
floor(numtemp) - floor(numtemp / 10) * 10 = 5
then case when numtemp - floor(numtemp) = 0
then case when cast(floor(numtemp / 10) as int) % 2 = 0
then numtemp = floor(numtemp / 10) / power(10,i);
else numtemp = round((numtemp / power(10,i+1))::numeric,i);
end case;
else numtemp = round((numtemp / power(10,i + 1))::numeric,i);
end case;
else numtemp = round((numtemp / power(10,i + 1))::numeric,i);
end case;
case when num > 0
then result_value = trunc(numtemp,i);
else result_value = trunc(0 - numtemp,i);
end case;
return result_value;
end
$$ LANGUAGE plpgsql;
最后
以上就是友好狗为你收集整理的Pgsql 自定义四舍六入函数Pgsql 自定义四舍六入函数前言的全部内容,希望文章能够帮你解决Pgsql 自定义四舍六入函数Pgsql 自定义四舍六入函数前言所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复