CREATE OR REPLACE FUNCTION public.fnc_arredonda_regra_abnt( var_valor numeric, var_decimais integer) RETURNS numeric LANGUAGE 'plpgsql' COST 100 VOLATILE AS $BODY$ DECLARE var_novo_valor numeric; var_valor_decimal text; var_valor_inteiro numeric; var_conf integer; var_cent integer; BEGIN if var_decimais > 8 THEN var_decimais = 8; END IF; var_valor_inteiro = TRUNC(var_valor, 0); var_valor_decimal = SUBSTR(var_valor::text, position('.' in var_valor::text)+1); var_valor_decimal = (RPAD(var_valor_decimal::text, var_decimais + 4, '0'))::text; var_conf = (SUBSTR(var_valor_decimal::text, var_decimais + 1, 4))::integer; var_cent = (SUBSTR(var_valor_decimal, 1, var_decimais))::text; IF var_conf > 5000 THEN var_novo_valor = ROUND(var_valor, var_decimais); ELSIF var_conf = 5000 THEN IF var_cent % 2 = 0 THEN var_novo_valor = TRUNC(var_valor, var_decimais); ELSE var_novo_valor = ROUND(var_valor, var_decimais); END IF; ELSE var_novo_valor = TRUNC(var_valor, var_decimais); END IF; RETURN var_novo_valor; END; $BODY$; ALTER FUNCTION public.fnc_arredonda_regra_abnt(numeric, integer) OWNER TO postgres;