O computador não lida muito bem com ponto flutuante (números reais, fracionados).
Esse resultado estranho, se não me engando, é notação científica, é uma aproximação do resultado encontrado: -2.842170943040401 elevado a -14
Que estranho isso, né? Você sabe como eu posso resolver isto?
tem várias técnicas diferentes que a gente pode usar, algumas linguagens tem libs ou funções que auxiliam nisso (aí tem que vasculhar as documentações). no meu caso, das soluções que testei, a que mais gostei e tive melhor resultado foi trabalhar com inteiros, e é a mesma coisa pra qualquer linguagem
Se quer trabalhar com valores exatos, pode usar outras libs específicas (como já mencionei na outra resposta).
Mas se for para continuar com float
, o que vc pode fazer é verificar se o valor está próximo de zero, com alguma tolerância.
Em Python, por exemplo, pode usar math.isclose
:
from math import isclose
x = 128.23 - (118.23 + 10)
if isclose(x, 0, rel_tol=1e-10, abs_tol=1e-10):
print('ok') # entra no if
Os parâmetros rel_tol
e abs_tol
são a tolerância que vc usa para comparar os números (consulte a documentação para mais detalhes). Não tem muito jeito, tem que ficar ajustando os valores para a precisão que você vai trabalhar.
Em JavaScript, pode ser feito algo similar. Uma versão bem simplificada seria:
function iguais(a, b, tolerancia=1e-10) {
return Math.abs(a - b) <= tolerancia;
}
var x = 128.23 - (118.23 + 10.00);
console.log(iguais(x, 0)); // true