problema de perda de precisão js (e processo de raciocínio para iniciantes)

**

problema de perda de precisão js (e processo de raciocínio para iniciantes)

**

(1) Pergunta: Por que java e js calculam 0,1 + 0,2 = 0,3000000000000004?


Primeiramente devemos entender que todos os números armazenados no computador são binários, ou seja, existem apenas dois números 01 no computador .
O entendimento mais superficial: converter decimal 0,1 em binário: 0,000110011001100110011001100110011...loop infinito.
Da mesma forma: converter decimal 0,2 em binário: 0,00110011001100110011001100110011...loop infinito.
Então: loop infinito + loop infinito = loop infinito, então binário Quando convertendo números decimais , há um erro e em JavaScript O número é um número de ponto flutuante de precisão dupla de 64 bits usando o padrão IEEE 754. Ele possui dígitos e não pode fazer loop infinito.

(2) Mas encontrei um problema...

Insira a descrição da imagem aqui
0,4 (decimal) = 0,0110011001100110…(binário)
0,5 (decimal) = 0,1 (binário)
Não deveria ser: um loop infinito de números + um número finito = um loop infinito de números? Logicamente falando, 0,5+0,4 não deveria ser igual a 0,9, mas deveria ser igual a algo como 0,900000000003

(3) Verifique os fatos

// Converte 0,1 e 0,2 em binário antes de realizar a operação
0.0001100110011001100110011001100110011001100110011001101 +
0.00110011001100110011001100110011001100110 0 110011001101 =
0,010011001100110011001100110011001100110011001100110011

//Convertido para decimal, é exatamente 0,30000000000000004

E 0,5 + 0,4: 0,01100110011001100110011001100110011001100110011001101 + 0,1 = 0,1110011001100110011001100110011001100110011001100 1 101

//Convertido para decimal, é exatamente 0,9,
só isso

Acho que você gosta

Origin blog.csdn.net/qq_44646982/article/details/113250349
Recomendado
Clasificación