[firebase-br] Arredondamento em procedure FireBird.

Itauto CPD cpd em itauto.com.br
Seg Fev 29 12:46:56 -03 2016


use o round(CAMPO, 2)

On 2 seria o numero de casas decimais .

Em 27/02/2016 10:00, Flavio Pereira escreveu:
> 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.
>


---
Este email foi escaneado pelo Avast antivírus.
https://www.avast.com/antivirus





Mais detalhes sobre a lista de discussão lista