[firebase-br] Arredondamento em procedure FireBird.

Flavio Pereira flavio em c2sistemas.com.br
Sáb Fev 27 10:00:11 -03 2016


Bom dia Pessoal!

Estou fazendo uma procedure no banco usando o ibexpert segue abaixo a mesma:

CREATE OR ALTER PROCEDURE SP_COMP_FINANCEIRO_SEGURADORA (
    VPI_PRODUTO INTEGER,
    VPI_PRODUTOR INTEGER,
    VPI_SEGURADORA INTEGER,
    VPI_SITUACAO CHAR(1),
    VPI_ORDEM INTEGER,
    VPS_DT_INICIAL VARCHAR(10),
    VPS_DT_FINAL VARCHAR(10))
RETURNS (
    NOME VARCHAR(35),
    VALOR_PREMIO NUMERIC(15,2),
    PARTICIPACAO NUMERIC(15,2),
    VALOR_TOTAL NUMERIC(15,2),
    COMISSAO_PAGA NUMERIC(15,2),
    MEDIA_COMISSAO NUMERIC(15,2),
    QTD INTEGER)
AS
DECLARE VARIABLE VLN_TOTAL NUMERIC(15,2) = 0;
BEGIN
  /* PROCEDURE TEXT */
  SELECT SUM(T.SEGS_VALOR_PREMIO_LIQUIDO) AS TOTAL
    FROM CADCLI T
   WHERE T.CADCLI_SITUACAO = :VPI_SITUACAO
     AND (T.PRODUTO    = :VPI_PRODUTO    OR :VPI_PRODUTO    = -1)
     AND (T.PRODUTOR   = :VPI_PRODUTOR   OR :VPI_PRODUTOR   = -1)
     AND (T.SEGURADORA = :VPI_SEGURADORA OR :VPI_SEGURADORA = -1)
     AND T.CADASTRO BETWEEN (:VPS_DT_INICIAL) AND (:VPS_DT_FINAL)
    INTO :VLN_TOTAL;

  FOR
    SELECT S.NOME, SUM(C.SEGS_VALOR_PREMIO_LIQUIDO) AS VALOR,
           SUM(C.SOBRA) AS COMISSAO_PAGA,
(SUM(C.SOBRA)/SUM(C.SEGS_VALOR_PREMIO_LIQUIDO)*100) AS MEDIA_COMISSAO,
           COUNT(C.CODIGO) AS QTD
      FROM CADCLI C
           LEFT JOIN SEGURADORA S ON (C.SEGURADORA = S.CODIGO)
--           LEFT JOIN PRODUTOR   P ON (C.PRODUTOR   = P.CODIGO)
     WHERE C.CADCLI_SITUACAO = :VPI_SITUACAO
       AND (C.PRODUTO    = :VPI_PRODUTO    OR :VPI_PRODUTO    = -1)
       AND (C.PRODUTOR   = :VPI_PRODUTOR   OR :VPI_PRODUTOR   = -1)
       AND (C.SEGURADORA = :VPI_SEGURADORA OR :VPI_SEGURADORA = -1)
       AND C.CADASTRO BETWEEN (:VPS_DT_INICIAL) AND (:VPS_DT_FINAL)
     GROUP BY S.NOME
     ORDER BY :VPI_ORDEM DESC
      INTO :NOME, :VALOR_PREMIO, :COMISSAO_PAGA, :MEDIA_COMISSAO, :QTD
  DO BEGIN
    PARTICIPACAO = ROUND((:VALOR_PREMIO / :VLN_TOTAL) * 100, 2);
    VALOR_TOTAL  = :VLN_TOTAL;
    SUSPEND;
  END
END

Pois bem!, minha dúvida é o seguinte onde esta o calculo de participação
resulta no seguinte valor

(31861,05 / 328.487,81) * 100 = 9,699309694323208

Gostaria de saber como faço para fazer o arredondamento do tipo, que quando
a parti da terceira casa decimal se o valor da terceira casa for igual ou
maior que 5 arredonde para cima e for menor que 5 arredonde para baixo.

Nesse exemplo acima seria para arredondar para o valor de 9,70.

-- 
Atenciosamente,



Mais detalhes sobre a lista de discussão lista