Subtração de variável Double

21/09/2004

0

Talvez eu esteja ficando louco mas não consegui subtrair valores com decimais.

Se eu colocar valores inteiros funciona bem, com valores decimais nunca chego a SALDO = 0. Tente com saldo a 333,33 e desconte valores de 111,11.

var
  Form1: TForm1;
  SALDO: Double;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
SALDO := StrToFloat( Edit1.Text );
end;


procedure TForm1.Button2Click(Sender: TObject);
Var Valor: double;
begin
Valor := StrToFloat( Edit2.Text );

Saldo := Saldo - Valor;
Memo1.Lines.Add(FormatFloat(´0.00´, valor) );
Edit1.Text := FormatFloat(´0.00´, Saldo);

if SALDO = 0 then
  ShowMessage(´Saldo Zerado´);
end;



Okama

Okama

Responder

Posts

21/09/2004

Aroldo Zanela

Colega,

Sim é um problema de armazenamento da mantissa. Use tipos currencys para evitar o problema.

Faça o exemplo abaixo e depois troque Currency por qualquer tipo Real, como Double:

var saldo: Currency;
begin
    saldo := 333.33;
    saldo :=  saldo - 111.11;
    ShowMessage(FloatToStr(saldo));
    saldo :=  saldo - 111.11;
    ShowMessage(FloatToStr(saldo));
    saldo :=  saldo - 111.11;
    ShowMessage(FloatToStr(saldo));
end;



Responder

21/09/2004

Marcelo Saviski

Na Unit math existem algumas funções p/ auxiliar na comparação de nº de ponto flutuante, considerando um ´desvio´ na precisão.


CompareValue
SameValue

por exemplo:

if SameValue(3.0401, 3.04, 0.01) then "parecidos"


ou no seu caso, usando a funçaõ IsZero

if IsZero(SALDo, 0,01) then ...


o último valor [color=blue:4a6a438920]Epsilon[/color:4a6a438920] informa a precisão, nos casos acima 1 centésimo, ´valores com frações menores que 1 centésimo onde o restante do valor fosse igual seriam consideradas iguais de acordo com a precisão mínima 0,01.´


Responder

21/09/2004

Okama

Agradeço as respostas.
Trocando o tipo double para Currency resolveu o problema.

Valeu! :wink:


Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

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

Aceitar