Tipo de dado number


Números Inteiros

Números inteiros são valores numéricos que não possuem casas decimais.

console.log(100); // 100

No exemplo acima, o número 100 é um exemplo de um número inteiro.

Números Flutuantes

Números flutuantes são valores numéricos que podem possuir casas decimais (pontos flutuantes, na programação).

console.log(3.1415); // 3.1415

Neste exemplo, o número 3.1415 é um exemplo de um número flutuante.

IEEE 754-2008

O padrão IEEE 754-2008 estabelece uma norma para a representação e aritmética de números de ponto flutuante em sistemas computacionais.

Problema

Em operações com números de ponto flutuante, pode ocorrer uma imprecisão devido às representações internas desses valores.

let num1 = 0.7;
let num2 = 0.1;
 
num1 += num2;
num1 += num2;
num1 += num2;
 
console.log(num1); // 0.9999999999999999
console.log(Number.isInteger(num1)); // false

No código acima, após uma série de operações, o valor de num1 deveria ser 1, mas devido à imprecisão, ele resulta em 0.9999999999999999.

Solução

Uma solução para lidar com essa imprecisão é utilizar métodos que arredondam o número para um determinado número de casas decimais.

let num1 = 0.7;
let num2 = 0.1;
 
num1 += num2;
num1 += num2;
num1 += num2;
 
num1 = parseFloat(num1.toFixed(2));
// OU
num1 = Number(num1.toFixed(2));
 
console.log(num1); // 1
console.log(Number.isInteger(num1)); // true

Outra abordagem é multiplicar os números pela quantidade de casas decimais desejadas, realizar a operação e, em seguida, dividir novamente para obter um resultado mais preciso.

let num1 = 0.7;
let num2 = 0.3;
 
num1 = (num1 * 100 + num2 * 100) / 100;
 
console.log(num1); // 1
console.log(Number.isInteger(num1)); // true

Referências