Weaknesses of type CWE-1077
6 resultsComparação de ponto flutuante com operador incorreto
Ocorre quando código compara números de ponto flutuante (float, double) usando operadores de igualdade (== ou !=) em vez de comparações com margem de tolerância. Devido a imprecisões de arredondamento inerentes à representação binária, duas variáveis que deveriam ser iguais logicamente podem nunca ser exatamente iguais em memória, causando comportamentos inesperados ou desvios de fluxo de segurança.
Um aplicativo de pagamento que verifica `if (saldo == 0.0)` para bloquear saque pode falhar porque operações anteriores deixaram saldo em 0.0000000001 ou -0.0000000001. Ou validação de autenticação que compara timestamp com `==` e permite bypass por diferença mínima em arredondamento.
Use comparação com epsilon (tolerância): `if (Math.abs(a - b) < EPSILON)` em vez de `a == b`. Alternativamente, represente valores monetários ou críticos como inteiros (centavos) ao invés de float, ou use bibliotecas de precisão arbitrária quando necessário.