Nú

Números em JavaScript

20 exercícios

Sobre Números

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.

Notações especiais

Notação exponencial

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.

Notação com sublinhado

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

Objeto nativo

Existem dois objetos nativos úteis quando lidamos com números:

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.

Valores numéricos especiais

O JavaScript tem vários valores numéricos especiais:

  • Dois valores de erro, NaN e Infinity.
  • Dois valores para o zero, +0 e -0.

NaN: não é um número

O valor de erro NaN (também conhecido como "não é um número") é produzido nos seguintes casos.

  • Não foi possível fazer o parsing de um número:
    Number('123'); // => 123
    Number('Hello, World!'); // => NaN
    
  • Uma operação falhou:
    Math.sqrt(-64); // => NaN
    
  • Um dos operandos é 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

Infinity é um valor de erro que indica um de dois problemas:

  • Um número não pode ser representado porque sua magnitude é grande demais.
    Math.pow(2, 1024); // => Infinity
    
  • Aconteceu uma divisão por zero.
    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

Os dois zeros

+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.

Comparação

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.

Armadilhas

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.

Editar via GitHub O link abre em uma nova janela ou aba

Aprenda Números

A prática está bloqueada

Desbloqueie mais 1 exercício para praticar Números