Problema com variáveis do tipo Double
Bug pra fazer o desenvolvedor desistir da vida

Publicado em: 03/05/2018 00:00:00, por IVAN VARGAS

Float, Double e Currency são apenas algumas variáveis que podemos utilizar em Delphi para armazenar valores monetários, quantidades, etc.

No entanto o Double é um pouco problemático, e na sua utilização me deparei com uma série de erros em questões de arredondamento e truncamento.

Com Double você encontra erros onde 5.000 é diferente de 5.000. Erros onde o Delphi jura de pé junto que 0.01 é diferente de 0.01. E convenhamos, uma diferença de 0,01 centavos pode gerar erros constrangedores em softwares de controle de contas.

Quer ver um exemplo assustadoramente real de um erro que podemos encontrar por ai quando utilizamos Double? Então veja a função a seguir:

  function TesteDouble: boolean;
  var
   d: Double;
  begin
    d := 0.01;
    Result := (d = 0.01);
  end;

O que você acha que essa função irá retornar: True ou False?

True? A resposta esta E... E... ERRADA! O Delphi retorna False! Utilizando Double 0.01 é diferente de 0.01.

O Double faz algum tipo de arredondamento em background, e por um motivo ou outro 0.00, por exemplo, pode ser 0.000000000001 em Double, o que não é a mesma coisa, e por ai vai.

Solução? Utilize Currency e seja feliz!

  function TesteCurrency: boolean;
  var
   d: Currency;
  begin
    d := 0.01;
    Result := (d = 0.01);
  end;

Esta função retornará True.

 

Sim, 0.01 é igual a 0.01 :D

 

 



IS5 TECNOLOGIA

São Lourenço do Sul/RS
Telefone: (53)9963-5721
E-mail: contato@is5.com.br
Facebook: fb.com/is5tecnologia
Skype: ivan_is5
GitHub: github.com/isvargas
O QUE FAZEMOS

Automação Comercial
Desenvolvimento de Sistemas
Hospedagem e Desenvolvimento de Sites
Aplicativos Mobile
Consultoria e Projetos Freelancer
Desenvolvido por is5 tecnologia