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/