O problema da perda de dados em segundo plano quando o número é muito grande

Recentemente, o projeto de desenvolvimento encontrou um poço: os dados solicitados pela interface e os dados retornados pelo navegador são inconsistentes.

O intervalo do valor máximo em java é maior que o valor em js, portanto, pode causar o problema de perda de precisão

E levar à inconsistência entre a visualização e a resposta nas ferramentas de desenvolvimento do navegador, a resposta são os dados de origem e os dados de visualização são processados, resultando na perda de precisão de números excessivos, conforme mostrado na figura

 

 A solução é usar o processamento de strings em segundo plano.

 

O problema da perda de precisão js:

Devido à implementação binária do computador e à limitação do número de bits, alguns números não podem ser representados de maneira limitada. Assim como alguns números irracionais não podem ser expressos finitamente, como pi 3,1415926 ..., 1,3333 ... etc. O JS segue a especificação IEEE 754, usa armazenamento de precisão dupla (precisão dupla) e ocupa 64 bits.

 

(1 bit é usado para representar o bit de sinal, 11 bits são usados ​​para representar o expoente, 52 bits são usados ​​para representar a mantissa)

Como, independentemente do tipo de expressão usada para o cálculo, na parte inferior do computador, os dados e operações específicos são realizados através do código de máquina 1 e 0. Devido ao mecanismo de implementação subjacente, quando um número de ponto flutuante é convertido em uma representação binária, ele não pode representar com precisão esses dados com um ponto decimal.A essência é converter o número de ponto flutuante no valor aproximado mais próximo expresso em binário. O exemplo a seguir pode ser usado para explicar brevemente o método de cálculo de números de ponto flutuante quando convertido em binário. Como mostrado abaixo:

 

0,02625 = 0,000001101 (binário), a representação binária não pode ser obtida com precisão; portanto, o "método de arredondamento" é usado (a cada 1 entrada, a cada 0 rodadas).

O exemplo acima é o princípio do problema: muitas linguagens compiladas, como Java e c #, encapsulam o processamento de números de ponto flutuante. Portanto, na maioria dos casos, não haverá problemas visíveis óbvios. Se ela é uma linguagem interpretada, parece que isso tem uma desvantagem natural.


Link de referência: https://blog.csdn.net/summerjx/java/article/details/81983459

 

Acho que você gosta

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