我是靠谱客的博主 友好狗,最近开发中收集的这篇文章主要介绍Pgsql 自定义四舍六入函数Pgsql 自定义四舍六入函数前言,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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 自定义四舍六入函数前言所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(61)

评论列表共有 0 条评论

立即
投稿
返回
顶部