Casa > E > Em Javascript, Porque Faz 0.1 + 0.2 ! ! == 0.3?

Em JavaScript, porque faz 0.1 + 0.2 ! ! == 0.3?

Em decimal, é fácil armazenar o número 0,3 de forma limpa. Requer apenas uma casa após o ponto decimal. Mas o computador não armazena números em ponto flutuante em decimal - ele os armazena em binário.

Em decimal, cada casa à direita do ponto decimal vale um décimo tanto quanto a casa à esquerda dele. Portanto, tem um décimo, depois um centésimo, um milésimo e assim por diante. Três décimos - que é 0,3 - guarda limpa e bem na décima casa.

Em binário, no entanto, cada casa à direita da casa decimal vale metade do que a casa à esquerda da mesma. Então o binário tem uma metade - um quarto - lugar, um oitavo - lugar, um décimo sexto - lugar, um trinta segundos, um sessenta e quatro lugares, etc.

O formato de ponto flutuante binário vai ter que armazenar o valor como um quarto, mais um trigésimo segundo, e um sessenta e quatro, e assim por diante, aproximando-se cada vez mais de 0.3 - mas nunca atingindo-o exactamente.

Então ele armazena a aproximação mais próxima de 0.3 que pode no número de bits que a variável tem disponível, e essa aproximação é o que você está vendo ao inspecionar o valor no seu programa.

Se você realmente precisa ser capaz de armazenar números decimais precisamente em um programa - por exemplo, aplicações financeiras - há algumas opções disponíveis:

Se você souber a precisão máxima que você vai precisar, você poderia considerar o uso de ponto fixo. Em ponto fixo, você usa um tipo inteiro para armazenar o valor, mas trata o valor do incremento como algo menor que 1. Por exemplo, você poderia armazenar um preço como um número inteiro em centavos, ou décimos/centésimos de um centavo.

Você também poderia usar um formato chamado "binary coded decimal". Ele usa quatro bits para armazenar cada dígito decimal - o que é um pouco ineficiente, pois 16 valores podem ser armazenados em 4 bits, mas a DCB só faz uso de 10 desses valores possíveis para armazenar 0-9.

Se a representação precisa dos números decimais é o que é realmente importante para a sua aplicação, no entanto, ainda pode valer a pena usar, apesar da ineficiência.

De Duffie Arti

Qual será o pacote para um desenvolvedor de IU com 3 anos de experiência com HTML5, CSS e JavaScript na Índia? :: Que características de IU são mais importantes em aplicações de design 3D?