[firebase-br] RES: Arredondamento em procedure FireBird.
Washington Moratti de Oliveira
ti em cbnmodas.com.br
Seg Fev 29 13:18:41 -03 2016
Mas ele já está usando
> PARTICIPACAO = ROUND((:VALOR_PREMIO / :VLN_TOTAL) * 100, 2);
Talvez pelo campo ser tipo float ele deve ser armazenado dessa forma,
Ao ser exibido em algum controle (Edit, dbgrig etc) é que deve ser tratado o
arredondamento, correto ?
Washington Moratti
Encarregado de T.I
(27) 3 722 9900
Cel.:9994 325 79
Skype: cpd.ravely
-----Mensagem original-----
De: lista [mailto:lista-bounces em firebase.com.br] Em nome de Itauto CPD
Enviada em: segunda-feira, 29 de fevereiro de 2016 12:47
Para: FireBase
Assunto: Re: [firebase-br] Arredondamento em procedure FireBird.
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
______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br Para
saber como gerenciar/excluir seu cadastro na lista, use:
http://www.firebase.com.br/fb/artigo.php?id=1107
Para consultar mensagens antigas:
http://www.firebase.com.br/pesquisa_lista.html
Mais detalhes sobre a lista de discussão lista