Existem dois tipos diferentes de números em JavaScript: number e bigint.
Os números são os mais usados e representam o tipo de dados numérico no formato de ponto flutuante de precisão dupla de 64 bits.
number: um tipo de dados numérico no formato de ponto flutuante de precisão dupla de 64 bits (IEEE 754).
Exemplos são -6, -2.4, 0, 0.1, 1, 3.14, 16.984025, 25, 976, 1024.0 e 500000.bigint: um tipo de dados numérico que pode representar inteiros no formato de precisão arbitrária.
Exemplos são -12n, 0n, 4n e 9007199254740991n.let numericValue = 42;
// => 42
Um literal numérico como 42 no código JavaScript é um valor de ponto flutuante, não um número inteiro.
Não existe um tipo inteiro separado para o uso cotidiano.
O tipo bigint não foi projetado para substituir o tipo number nos usos do dia a dia.
42 ainda é um Number, não um BigInt.
Os números também podem ser expressos em formas literais como 0b101, 0o13, 0x0A. Saiba mais sobre a gramática lexical de números aqui.
A notação E indica um número que deve ser multiplicado por 10 elevado a uma determinada potência.
O formato da notação E é um número, seguido de e ou E e depois pela potência de 10 pela qual multiplicar.
const num = 3.125e7;
// => 31250000
// The notation essentially says, "Take 3.125 and multiply it by 10^7".
A notação E também pode ser usada para representar números muito pequenos:
const num = 325987e-6; // Equals 0.325987
// The notation essentially says, "Take 325987 and multiply it by 10^-6.
Sublinhados podem ser usados para tornar números grandes mais fáceis de ler para o usuário. O compilador vai ignorar completamente os sublinhados.
const num = 1_000_000; // You can read this as 1,000,000
console.log(num);
// => 1000000
Existem dois objetos nativos úteis quando lidamos com números:
Number: propriedades estáticas para valores comuns e úteis, métodos estáticos para verificação de tipos e conversão de tipos, métodos de instância para conversão de tipos e formatação de números como strings.Math: propriedades e métodos para constantes e funções matemáticas; não funciona com BigInt.O Math também inclui métodos para arredondar números.
Você pode ler mais sobre as opções de arredondamento disponíveis neste artigo do javascript.info sobre arredondamento.
Math.floor(234.34); // => 234
Math.ceil(234.34); // => 235
O object global nativo Number é também uma function global que pode ser usada para converter quase tudo que se pareça com um número em um number.
Ele é menos tolerante do que fazer o parsing de uma string para um number.
const date = new Date('December 17, 1995 03:24:00');
const unix = Number(date);
unix;
// => 819199440000
Existem três tipos de valores máximos (e mínimos / máximo negativo) para números em JavaScript:
VALUE: dados por Number.MAX_VALUE e Number.MIN_VALUE
INFINITY: dados por Number.POSITIVE_INFINITY e Number.NEGATIVE_INFINITY
SAFE_INTEGER: dados por Number.MAX_SAFE_INTEGER e Number.MIN_SAFE_INTEGER
Por causa de como os números em JavaScript são implementados, nem todo número entre Number.MIN_VALUE e Number.MAX_VALUE pode ser representado.
No entanto, todo número entre Number.MIN_SAFE_INTEGER - 1 e Number.MAX_SAFE_INTEGER + 1 pode ser representado.
O JavaScript tem vários valores numéricos especiais:
NaN e Infinity.+0 e -0.O valor de erro NaN (também conhecido como "não é um número") é produzido nos seguintes casos.
Number('123'); // => 123
Number('Hello, World!'); // => NaN
Math.sqrt(-64); // => NaN
NaN + 69; // => NaN
NaN é o único valor que não é igual a si mesmo:
NaN === NaN; // => false
Se você quiser verificar se um valor é NaN, precisa usar a função global isNaN():
isNaN(NaN); // => true
isNaN(123); // => false
Infinity é um valor de erro que indica um de dois problemas:
Math.pow(2, 1024); // => Infinity
6 / 0; // => Infinity
-6 / 0; // => -Infinity
Infinity é maior que qualquer outro número (exceto NaN).
Da mesma forma, -Infinity é menor que qualquer outro número (exceto NaN).
A função global isFinite() permite verificar se um valor é um número de verdade (nem infinito nem NaN):
isFinite(80085); // => true
isFinite(Infinity); // => false
isFinite(NaN); // => false
+0 e -0 são números distintos em JavaScript. Eles podem surgir quando você representa um número tão pequeno que é indistinguível de 0.
O zero com sinal permite registrar “de qual direção” você chegou ao zero, ou seja, qual era o sinal do número antes de ele ser considerado zero.
A melhor prática é fingir que existe apenas um zero.
Dois números são considerados iguais se tiverem o mesmo valor.
1 == 1.0;
// => true
1 === 1.0;
// => true
// Remember, all numbers are floating-points, so this is
// different syntax for the exact same value.
1 === 1n;
// => false
// Strictly checking a number against a bigint will always result
// in false.
Veja comparação para mais informações sobre comparações em geral e sobre como comparar valores numéricos em JavaScript.
Como os números em JavaScript são números de ponto flutuante, toda conta feita com esses valores é uma conta de ponto flutuante. Portanto, em JavaScript:
0.1 + 0.2 === 0.3;
// => false
Veja 0.30000000000000004.com para uma explicação breve e o Apêndice D do Numerical Computation Guide da Oracle, "What Every Computer Scientist Should Know About Floating-Point Arithmetic", para uma explicação aprofundada.