INTEQ KB
Advertisement

Números com ponto flutuante possuem uma imprecisão natural e portanto não devem ser comparados a outros valores com o objetivo de saber se são exatamente iguais.

Um exemplo interessante que demonstra o problema:

  var b = (0.1 + 0.2) + 0.3 == 0.1 + (0.2 + 0.3) 

Por mais absurdo que possa parecer, b será False.

Dois números sempre devem ser comparados com uma tolerência, e para isto o InteqJavaScript possui uma função chamada Math.isZero() que pode ser representada pelo código abaixo:

 Math.isZero = function ( value ){
   return value < 0.0000001 && value > -0.0000001
 }

Errado:

if ( soma == 0 )
if ( !soma )
if ( soma1 == soma2 )
if ( soma1 != soma2 )

Correto:

if ( Math.isZero(soma) )
if ( Math.isZero(soma) )
if ( Math.isZero( soma1 - soma2) )
if ( !Math.isZero( soma1 - soma2) )


Artigos:
http://www.macaulay.ac.uk/fearlus/floating-point/
http://support.microsoft.com/kb/125056/EN-US/

Advertisement