[firebase-br] Campo zerado
Sandro Souza
escovadordebits em gmail.com
Qui Dez 4 11:56:50 -03 2008
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
>
Mais detalhes sobre a lista de discussão lista