SET TERM ^ ;

CREATE OR ALTER function FN_CALC_VALOR_ITEM_PEDIDO (
    VALOR numeric(18,8),
    DECIMAIS integer = 2)
returns numeric(18,8)
AS
declare variable POSICAO_PONTO INTEGER;
declare variable VALOR_STRING VARCHAR(100);
declare variable VALOR_RETORNO NUMERIC(15,2);
begin
    VALOR_STRING  = CAST(COALESCE(:VALOR,0.000000) as VARCHAR(100));
    POSICAO_PONTO = POSITION('.' IN VALOR_STRING);
    IF(POSICAO_PONTO > 0 AND CAST(COALESCE(SUBSTRING(SUBSTRING(VALOR_STRING FROM POSICAO_PONTO FOR 4) FROM 4 FOR 1),0) AS INTEGER) >= 6)THEN
    BEGIN
       VALOR_RETORNO = CAST(:VALOR AS NUMERIC(15,2));
    END
    else
    BEGIN
       VALOR_RETORNO = TRUNC(:VALOR,2);
    END
    RETURN VALOR_RETORNO;
END

^ 
SET TERM ; ^