【PostgreSQL】四捨五入・切り上げ・切り捨て(Round)
概要
四捨五入、切り上げ、切り捨て用の自作関数です。
「第〇位」を「四捨五入、切り上げ、切り捨て」か、分けることができるようになっています。
この自作関数で使っている構文
この自作関数では、次の関数を使用しています。
-- 1.四捨五入
round(数値 , 小数点以下をこの桁数にする) -- 四捨五入
-- 例
select * From round(123.45678,3); -- 123.457(小数第3位四捨五入)
-- 2.切り捨て
trunc(数値 , 小数点以下をこの桁数にする) -- 切り捨て
-- 例
select * From trunc(123.45678,3); -- 123.456(小数第3位切り捨て)
引数
引数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;
※ 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'
関連記事