[firebase-br] RES: Arredondamento em procedure FireBird.

Flavio Pereira flavio em c2sistemas.com.br
Seg Fev 29 21:56:11 -03 2016


Delphi 7

Query, Provider, ClientDataSet e DataSouce.

Em 29 de fevereiro de 2016 14:52, Itauto CPD <cpd em itauto.com.br> escreveu:

> Pelo que vi vc ta usando como Numeric(15,2) , aqui pra mim , retorna
> somente com as duas casas decimais ... bom qual IDE vc utiliza pra
> desenvolvimento ?
>
> se for Delphi , pode usar isso pra arredondar no grid
>  TNumericField(ZQuery1.FieldByName('CAMPO_BANCO_NUMERICO')).DisplayFormat
> := ',0.00;-,0.00';
>
>
> Em 29/02/2016 13:18, Washington Moratti de Oliveira escreveu:
>
>> 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
>>
>>
>> ______________________________________________
>> 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
>>
>
>
> ---
> 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
>



-- 
Atenciosamente,



Mais detalhes sobre a lista de discussão lista