Fórum Problemas com cálculo #300918

26/10/2005

0

Tenho uma variável Saldo como Real e em uma determinada parte do código utilizo o seguinte:
saldo:=pagar.Value;
saldo:=saldo-(dm.qpromissoriasSaldo.Value+acrescimo.Value);


Ai por exemplo o valor de Saldo é 65,32
E o valor do campo dm.qpromissoriasSaldo.Value tmabm é 65,32
E este Acrescimo.Value é 0,00

Quando executo esta operação ´como se a subtração de (65,32-(65,32+0,00) não desse 0(zero);

Pedi para mostrar um ShowMessage ]
ShowMessage(FloattoStr(saldo));

depois do trecho do código e apareceu o seguinte no mesage:

3,0517577442879E-7

Olha só que doidera, alguem já viu isto?


Daniel_mc

Daniel_mc

Responder

Posts

26/10/2005

Daniel_mc

Ai pessoa troquei a declaração da variável saldo de Real para Currency e funcionou. Alguém poderia me explicar o que houve?


Responder

Gostei + 0

27/10/2005

Massuda

...troquei a declaração da variável saldo de Real para Currency e funcionou. Alguém poderia me explicar o que houve?
Real (assim como Single/Double/Extended) são valores em ponto flutuante o que significa que estão sujeitos a erros de arredondamento (nem todo valor tem representação exata na máquina, como é o caso de 1/3).

Currecy é um tipo equivalente a um Integer, o que significa que todo valor que ele armazena tem representação exata na máquina.

Existem técnicas de cálculo para evitar problemas de arredondamento com valores em ponto flutuante, mas via de regra, para cálculos que envolvem quantias monetárias, use Currency.


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar