El problema de la pérdida de datos de fondo cuando el número es demasiado grande

Recientemente, el proyecto de desarrollo encontró un pozo. Los datos solicitados por la interfaz son inconsistentes con los datos devueltos por el navegador. Más tarde se descubrió que la precisión se perdió debido al número excesivo.

El rango del valor máximo en java es mayor que el de js, por lo que puede causar el problema de pérdida de precisión

Y conduce a una inconsistencia entre la vista previa y la respuesta en las herramientas de desarrollo del navegador, la respuesta son los datos de origen y los datos de la vista previa se procesan, lo que resulta en la pérdida de precisión de números excesivos, como se muestra en la figura

 

 La solución es utilizar el procesamiento de cadenas en segundo plano.

 

El problema de la pérdida de precisión js:

Debido a la implementación binaria de la computadora y la limitación del número de bits, algunos números no pueden representarse de manera limitada. Al igual que algunos números irracionales no se pueden expresar finitamente, como pi 3.1415926 ..., 1.3333 ... etc. JS sigue la especificación IEEE 754, utiliza almacenamiento de doble precisión (doble precisión) y ocupa 64 bits.

 

(1 bit se usa para representar el bit de signo, 11 bits se usan para representar el exponente, 52 bits se usan para representar la mantisa)

Debido a que no importa qué tipo de expresión se use para el cálculo, en la parte inferior de la computadora, los datos y operaciones específicos se realizan a través del código de máquina de 1 y 0. Debido al mecanismo de implementación subyacente, cuando un número de coma flotante se convierte en una representación binaria, no puede representar con precisión dichos datos con un punto decimal. La esencia es convertir el número de coma flotante al valor aproximado más cercano expresado en binario. El siguiente ejemplo se puede utilizar para explicar brevemente el método de cálculo de números de punto flotante cuando se convierte a binario. Como se muestra a continuación:

 

0.02625 = 0.000001101 (binario), la representación binaria no se puede obtener con precisión, por lo que se utiliza el "método de redondeo" (cada 1 ingresa, cada 0 rondas).

Lo anterior es el principio del problema: muchos lenguajes compilados como Java y C # encapsulan el procesamiento de números de coma flotante. Por lo tanto, en la mayoría de los casos, no habrá problemas visibles obvios. js como lenguaje interpretado, parece que esto tiene una desventaja natural.


Enlace de referencia: https://blog.csdn.net/summerjx/java/article/details/81983459

 

Supongo que te gusta

Origin www.cnblogs.com/gopark/p/12693037.html
Recomendado
Clasificación