Problema de pérdida de precisión de js (y proceso de razonamiento para principiantes)

**

Problema de pérdida de precisión de js (y proceso de razonamiento para principiantes)

**

(1) Pregunta: ¿Por qué java y js calculan 0,1+0,2=0,30000000000000004?


En primer lugar debemos entender que todos los números almacenados en la computadora son binarios, es decir, solo hay dos números 01 en la computadora .
La comprensión más superficial: convertir decimal 0.1 a binario: 0.000110011001100110011001100110011... bucle infinito.
Del mismo modo: convertir decimal 0.2 a binario: 0.00110011001100110011001100110011... bucle infinito.
Entonces: bucle infinito + bucle infinito = bucle infinito, entonces binario Cuando convertir números decimales , hay un error y en JavaScript El número es un número de coma flotante de doble precisión de 64 bits que utiliza el estándar IEEE 754. Tiene dígitos y no puede repetirse infinitamente.

(2) Pero encontré un problema...

Insertar descripción de la imagen aquí
0,4 (decimal) = 0,0110011001100110…(binario)
0,5 (decimal) = 0,1 (binario) ¿
No debería ser: un bucle infinito de números + un número finito = un bucle infinito de números? Lógicamente hablando, 0,5+0,4 no debería ser igual a 0,9, sino algo como esto 0,900000000003

(3) Verificar los hechos

// Convierte 0.1 y 0.2 a binario antes de realizar la operación
0.0001100110011001100110011001100110011001100110011001101 +
0.00110011001100110011001100110011001100110 0 110011001101 =
0,010011001100110011001100110011001100110011001100110011

// Convertido a decimal, es exactamente 0,30000000000000004

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

// Convertido a decimal, es exactamente 0,9,
eso es todo

Supongo que te gusta

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