Erro em Valores Float

Delphi

31/01/2008

Olá,

Tenho um campo (valor) do tipo numeric(18,4). Gravo um registro com o valor 10,04 nele.
Depois de gravado, se eu fizer uma showmessage(formatFloat(´0.00000000000000000´,ClientDataSetContasReceber.FieldByName(´VALOR´).asFloat, vai mostrar o seguinte resultado: 10,03999999999992000. O correto seria 10,0400000000000000 logicamente.

Esssa inconsistência acaba gerando erros em cálculos.

Alguém sabe a causa disso e como resolver?

Uso FB 2.0 e D7
Obrigado


Armindo

Armindo

Curtidas 0

Respostas

Aroldo Zanela

Aroldo Zanela

31/01/2008

Colega,


Existem longas discussões aqui e na Web (google) em face as questões relacionadas a mantissa de número de ponto flutuando. Para encurtar o assunto, use tipos currency para evitar problemas.


GOSTEI 0
Armindo

Armindo

31/01/2008

[quote:b2910bef4c=´Aroldo Zanela´]Colega,


Existem longas discussões aqui e na Web (google) em face as questões relacionadas a mantissa de número de ponto flutuando. Para encurtar o assunto, use tipos currency para evitar problemas.[/quote:b2910bef4c]

Obrigado pela resposta, mas como ficaria essa instrução SQL: CAST((VALOR1 + VALOR2) AS [b:b2910bef4c]FLOAT[/b:b2910bef4c])AS VALORTOTAL?

Obrigado


GOSTEI 0
Aroldo Zanela

Aroldo Zanela

31/01/2008

Colega,

Na consulta SQL não há necessidade de efetuar casting, considerando que os tipos já são numéricos (18,4).


GOSTEI 0
Armindo

Armindo

31/01/2008

[quote:3d16ab82ce=´Aroldo Zanela´]Colega,

Na consulta SQL não há necessidade de efetuar casting, considerando que os tipos já são numéricos (18,4).[/quote:3d16ab82ce]

Na verdade eu preciso sim. É que essas consultas são para relatórios e como utilizo o Fortes Report e este, no seu componente RLDBResult, não soma valores numéricos, eu transformava em float para a soma dar certo.
Mas resolvi de outra maneira: vou seguir seu conselho e utilizar o tipo currency na aplicação de forma em geral, em substituição ao tipo float/extended. Nos relatórios crio um campo calculado para os totais.

Obrigado.


GOSTEI 0
POSTAR