[firebase-br] Campo zerado

joao_jma joao_jma em itelefonica.com.br
Qui Dez 4 13:39:48 -03 2008


Conversei em OFF com um membro dessa lista, o fernando, e ele me aconselhou 
a mudar os tipos dos campos.

Realmente alterando o tipo dos campos a coisa fluiu normalmente.

OBRIGADO  A TODOS !!!





Assinatura João M. de Amorim - Informática: Andreza Enxovais - Ibitinga/SP 
((16) 3341-9000 È(16) 9239-0959
----- Original Message ----- 
From: "Sandro Souza" <escovadordebits em gmail.com>
To: "FireBase" <lista em firebase.com.br>
Sent: Thursday, December 04, 2008 10:56 AM
Subject: Re: [firebase-br] Campo zerado


Bom dia/tarde João.

Pois é amigo. O tipo de dado DOUBLE PRECISION, que é o equivalente ao Double
do Delphi, já é uma aproximação de valor, ou seja, você salva 1 (um), mas
internamente está salvo 0.999999999999999999.

O tipo de dado FLOAT é menos preciso ainda, aí já viu.

Alterando os tipos desses campos de FLOAT para NUMERIC(...,...) ou
DECIMAL(...,...), mas no dialeto 1 ou 2, não adiantará muito, pois também
serão armazenados como aproximações.

Se o seu banco de dados foi criado no dialeto 1 ou 2, então terá que ser
regerado no dialeto 3 (criando um novo banco de dados no dialeto 3 e
copiando tudo p/ ele).

Se já está no dialeto 3, então troque seus tipos p/ NUMERIC(...,...) ou
DECIMAL(...,...) e verifique novamente se ainda ocorre os problemas de
precisão.

Para trocar os tipos desses campos, você poderia executar algo como:

ALTER TABLE MOVIMENTACAO
  ALTER PROVENTOS TYPE DECIMAL(18,4),
  ALTER DESCONTOS TYPE DECIMAL(18,4);

Depois é só obter os valores novamente para verificar se ainda ocorrem os
erros de precisão.

2008/12/4 joao_jma <joao_jma em itelefonica.com.br>

> Os campos foram criados escolhendo o tipo FLOAT pelo IBExpert. Estrutura
> abaixo:
>
> CREATE TABLE MOVIMENTACAO (
>   CODIGO             INTEGER NOT NULL,
>   MES                   INTEGER,
>   ANO                    INTEGER,
>   FUNCIONARIO  INTEGER,
>   PROVENTOS    FLOAT,
>   DESCONTOS    FLOAT,
>   TOTAL                 FLOAT,
>   SALARIO           FLOAT,
>   VALE                 FLOAT,
>   CESTABASICA  VARCHAR(1),
>   TIPOMOV             VARCHAR(1)
> );
>
> Quando eu digo visualizar, é tanto quando o sistema está rodando e eu vejo
> os registros e também quando visualizo pelo IBExpert..... e pelo IBExpert
> quando entro no campo, me aparece akele valor louco.
>
> Gravo desta maneira (variaveis declaradas no delphi do tipo double)
>
> Var
>  wProventos, wDescontos: Double;
>
>  ...........................funçoes de calculos..........................
>
>  qMovimentacaoPROVENTOS.Value := wProventos;
>  qMovimentacaoDESCONTOS.Value := wDescontos;
>  qMovimentacaoTOTAL.Value := wProventos - wDescontos;
>
> agradeço
>
>
> Assinatura João M. de Amorim - Informática: Andreza Enxovais - Ibitinga/SP
> ((16) 3341-9000 È(16) 9239-0959
> ----- Original Message ----- From: "Fabrício Fadel Kammer" <
> ffkammer em conchalnet.com.br>
> To: "FireBase" <lista em firebase.com.br>
> Sent: Thursday, December 04, 2008 8:53 AM
> Subject: Re: [firebase-br] Campo zerado
>
>
>
> Bom dia João, vc disse campos criados com tipo float? Seria NUMERIC no
> FB? Como eles estão definidos? Posta a estrutura dessa tabela pra gente
> ver como esses campos foram criados.
>
> Vc também fala que qdo está visualizando... onde vc está visualizando
> esses campos?
>
> Provavelmente o problema está no momento da gravação, como esses campos
> são resultados de cálculos você deve arredondá-los antes de gravar no
> banco, para ter a informação correta, conforme o valor informado pelo
> seu usuário.
>
> Abraços
>
> joao_jma escreveu:
>
>> Usando Firebird 1.5, Delphi 7 com Zeos.
>>
>> Campos da Tabela que faço calculo. (CAMPOS CRIADOS COM O TIPO FLOAT)
>>
>> PROVENTOS = 690,800
>> DESCONTOS = 690,800
>> ------------------------------------
>> TOTAL = 0,000
>>
>>
>> Quando estou visualizando, os valores aparecem da maneira acima citada.
>> Mas quando eu "entro" no campo pelo IBExpert, dando um ENTER sobre ele, 
>> como
>> se eu fosse alterá-lo, os valores mudam... ficam assim:
>>
>> PROVENTOS = 690,7999877929688
>> DESCONTOS = 690,7999877929688
>> ------------------------------------------------------
>> TOTAL = -0,0000152587891
>>
>>
>> Existe um relatório no sistema, que eu testo se o campo TOTAL é < 0 ...
>> caso seja menor que zero, imprimo a linha em vermelho.
>> E nesse caso a linha está saindo vermelha.... Alguém sabe me dizer, qual 
>> a
>> causa, motivo, razão ou circunstância que está levando esses campos de
>> valores ficarem assim?
>>
>> Antecipo meus agradecimentos
>>
>>    João M. de Amorim - Informática: Andreza Enxovais - Ibitinga/SP
>>    ((16) 3341-9000
>>    È(16) 9239-0959
>>     ______________________________________________
>> 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://firebase.com.br/pesquisa
>>
>>
>>
>
> ______________________________________________
> 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://firebase.com.br/pesquisa
>
>
> ______________________________________________
> 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://firebase.com.br/pesquisa
>
______________________________________________
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://firebase.com.br/pesquisa





Mais detalhes sobre a lista de discussão lista