【PostgreSQL】四捨五入(Round)

2020年7月15日

スポンサーリンク

説明

四捨五入、切り上げ、切り捨て用の関数です。

 

引数

引数1(numeric):四捨五入する対象の数値

引数2(integer):計算するフラグ (1:四捨五入、2:切り上げ、3:切り捨て)

引数3(integer):小数点何桁まで表示するか(2を指定:小数2桁まで表示する)

 

返り値

計算後の値

 

コード

CREATE OR REPLACE FUNCTION round(
    numeric,
    integer,
    integer)
  RETURNS numeric AS
$BODY$
declare

	n_target        alias for $1; 	--引数1:四捨五入する対象の数値
	i_flg           alias for $2; 	--引数2:計算するフラグ (1:四捨五入、2:切り上げ、3:切り捨て)
	i_digits        alias for $3; 	--引数3:小数点何桁まで表示するか(2を指定:小数2桁まで表示する)
	c_add           character varying;

begin

	if i_flg = 1 then
		--四捨五入
		return round(n_target,i_digits);
	
	elseif i_flg = 2 then
		--切りあげ
		c_add ='0.';
		FOR i IN 1..i_digits LOOP
		    c_add = c_add || '0';
		END LOOP;
		c_add = c_add || '9';

		return trunc(n_target + cast(c_add as numeric),i_digits);
	
	elseif i_flg = 3 then
		--切り捨て
		return trunc(n_target,i_digits);
	end if;

	return null;

end;
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;
ALTER FUNCTION round(numeric, integer, integer)
  OWNER TO postgres;

※PostgreSQL9.5 , 9.6 , 10 , 11 , 12で動作確認済み 自作関数の実行方法はこちら

 

実行例

四捨五入

--小数第3位四捨五入(小数2桁まで表示する)
select * From round(1.2345678,1,2);  --  '1.23'

 

切り上げ

--小数第4位切り上げ(小数3桁まで表示する)
select * From round(1.2345678,2,3);  --'1.235'
 

切り捨て

--小数第4位切り捨て(有効桁数3桁)
select * From round(1.2345678,3,3);  --'1.234'

 

PostgreSQLの構文まとめを書いています

入門~経験者まで「基本構文・こんな時どう書くんだっけ?」のまとめ