Problema com decimais do Interbase no Delphi
Olá, pessoal!
Enfrentei o seguinte problema com o Delphi:
Tenho um banco de dados do Interbase 6 e uma tabela com campos numéricos que criei como NUMERIC(9,2).
O problema é que ao recuperar estes valores no Delphi através de uma Query em SQL...
. Valor : = QueryNotas.FieldByName(´preco´).Value;
. Obs.: Ao invés de .Value, também tentei AsFloat, AsVariant e
. AsCurrency sem sucesso.
...o Delphi não recupera as casas decimais, apenas a parte inteira dos valores deste campo:
Tive que aumentar o tamanho do campo para NUMERIC(10,2) para que o Delphi reconheça as casas decimais. Abaixo de (10,2) ele não recupera os valores decimais.
Alguém sabe porque isso acontece? E se existe alguma outra solução além de ampliar o tamanho dos campos?
Obrigado.
Enfrentei o seguinte problema com o Delphi:
Tenho um banco de dados do Interbase 6 e uma tabela com campos numéricos que criei como NUMERIC(9,2).
O problema é que ao recuperar estes valores no Delphi através de uma Query em SQL...
. Valor : = QueryNotas.FieldByName(´preco´).Value;
. Obs.: Ao invés de .Value, também tentei AsFloat, AsVariant e
. AsCurrency sem sucesso.
...o Delphi não recupera as casas decimais, apenas a parte inteira dos valores deste campo:
Tive que aumentar o tamanho do campo para NUMERIC(10,2) para que o Delphi reconheça as casas decimais. Abaixo de (10,2) ele não recupera os valores decimais.
Alguém sabe porque isso acontece? E se existe alguma outra solução além de ampliar o tamanho dos campos?
Obrigado.
Alexandre7
Curtidas 0
Respostas
Adeno
05/05/2004
Cara eu não sei se é bem isso que vc esta querendo dizer, mas vamos lá
os campos tipo 990,89 com essas casas decimais são tipo arredondadas, por exemplo 56,30 ficaria 56,3 ou seja, vai desprezar uma casa... bem se for isso utilize esta função =>
Edit1.Text:=FormatFloat(´R$ #,0.00´,Fields.Fields[0].Asinteger);
Neste caso ela sempre vai retornar os floats com 2 casas decimais e um R$ na frente, eu fiz isso usando dbExpress
os campos tipo 990,89 com essas casas decimais são tipo arredondadas, por exemplo 56,30 ficaria 56,3 ou seja, vai desprezar uma casa... bem se for isso utilize esta função =>
Edit1.Text:=FormatFloat(´R$ #,0.00´,Fields.Fields[0].Asinteger);
Neste caso ela sempre vai retornar os floats com 2 casas decimais e um R$ na frente, eu fiz isso usando dbExpress
GOSTEI 0
Alexandre7
05/05/2004
Não é bem isso não Adeno. O que aconteceu é que no banco de dados Interbase 6 eu tenho um valor de 90,56 em um campo que criei como NUMERIC(9,2), mas, quando vou somá-lo com o valor 100,00 de outro campo, o resultado é 190,00 e não 190,56 como deveria.
O Delphi sequer está arredondando, está simplesmente ignorando o valor decimal 0,56.
Eu acho que é um problema no Delphi (utilizo o 6), pois, quando consulto o banco de dados pelo IBExpert, o valor aparece certo (90,56).
Só consegui resolver o problema quando aumentei o tamanho do campo para NUMERIC(10,2), então o Delphi passou a somar corretamente e exibir o resultado 190,56.
Gostaria apenas de saber o porque disso e se a única solução é realmente utilizar tamanhos acima de 9 para a parte inteira do campo, ou seja, acima de NUMERIC(9,2).
O Delphi sequer está arredondando, está simplesmente ignorando o valor decimal 0,56.
Eu acho que é um problema no Delphi (utilizo o 6), pois, quando consulto o banco de dados pelo IBExpert, o valor aparece certo (90,56).
Só consegui resolver o problema quando aumentei o tamanho do campo para NUMERIC(10,2), então o Delphi passou a somar corretamente e exibir o resultado 190,56.
Gostaria apenas de saber o porque disso e se a única solução é realmente utilizar tamanhos acima de 9 para a parte inteira do campo, ou seja, acima de NUMERIC(9,2).
GOSTEI 0
Alexandre7
05/05/2004
...
GOSTEI 0
Alexandre7
05/05/2004
sobe
GOSTEI 0
Fer_nanda
05/05/2004
Oi Alexandre, não sei porque isso ocorre, na verdade nunca passei por essa situação. Mas vc jah tenou definir seu campo do tipo float? Provavelmente isso não ocorra.
GOSTEI 0
Rogerio_amorim
05/05/2004
Vc poderia criar como DOUBLE PRECISION, geralmente é o que eu uso
Rogério Amorim
Rogério Amorim
GOSTEI 0
Aroldo Zanela
05/05/2004
Colega,
Você está utilizando BDE e dialeto 3? Se sim, basta mudar de componentes de acesso aos dados, como: IBX, ADO, DBX, Zeos, etc.
Você está utilizando BDE e dialeto 3? Se sim, basta mudar de componentes de acesso aos dados, como: IBX, ADO, DBX, Zeos, etc.
GOSTEI 0