JavaScript: Números e Math em JavaScript

Última atualização: 2026-10-13

Em JavaScript, existe apenas um tipo numérico: Number. Seja inteiro ou decimal, tudo é Number. Isso é diferente de linguagens como Java ou C que distinguem entre int, float, e assim por diante. Mais simples, sim — mas vem com algumas armadilhas.

Métodos matemáticos:Number.isNaN() Math.random() Math.floor() Math.round() Math.ceil() Math.abs() Math.max() Math.min() Math.pow() isFinite() toFixed() Number() parseInt Math

1. Tipo Number

Em JavaScript, tanto inteiros quanto números de ponto flutuante são do tipo Number — não existe um tipo inteiro separado.

HTML
<script>
let a = 42;        // Isso é um Number
let b = 3.14;      // Isso também é um Number
typeof a;          // "number"
typeof b;          // "number"
</script>

Números também podem ser escritos em vários outros formatos:

HTML
<script>
let hex = 0xFF;       // Hexadecimal, igual a 255
let octal = 0o10;     // Octal, igual a 8
let binary = 0b1010;  // Binário, igual a 10
let big = 1e6;        // Notação científica, igual a 1000000
</script>

NaN significa "Not a Number" (Não é um Número), mas é do tipo Number — uma das escolhas de design mais irônicas do JavaScript.

HTML
<script>
typeof NaN;          // "number"  ← Isso mesmo, é realmente um número
NaN === NaN;         // false     ← Não é nem igual a si mesmo!
Number.isNaN(NaN);   // true      ← Use este método para verificar NaN
</script>

Quando NaN aparece? Quando você tenta fazer matemática com algo que não é um número:

HTML
<script>
parseInt('abc');    // NaN
'olá' * 5;         // NaN
Math.sqrt(-1);     // NaN
</script>

Infinity representa infinito positivo e aparece ao dividir por zero:

HTML
<script>
1 / 0;             // Infinity
-1 / 0;            // -Infinity
typeof Infinity;   // "number"
</script>
💡 Dica: Para verificar se um valor é NaN, nunca use === — use Number.isNaN(). Como NaN === NaN é false, esta é uma armadilha que pegou incontáveis desenvolvedores.


3. Precisão de Ponto Flutuante

Esta é a peculiaridade mais famosa do JavaScript: 0.1 + 0.2 !== 0.3.

HTML
<script>
0.1 + 0.2;          // 0.30000000000000004
0.1 + 0.2 === 0.3;  // false
</script>

O motivo está relacionado a como os computadores armazenam números de ponto flutuante em binário. O valor 0.1 é uma fração repetitiva em binário, levando à perda de precisão durante o armazenamento. Isso não é exclusivo do JavaScript — todas as linguagens que usam o padrão IEEE 754 têm esse problema.

A solução: use toFixed() para formatação, ou aumente a escala antes de calcular:

HTML
<script>
(0.1 + 0.2).toFixed(2);   // "0.30"
(0.1 * 100 + 0.2 * 100) / 100;  // 0.3
</script>

▶ Exemplo: Demonstração de Problemas de Precisão

▶ Experimente

4. O Objeto Math

Math é a utilidade matemática embutida do JavaScript. Sem necessidade de instanciação — basta chamar seus métodos diretamente:

Método/Propriedade Propósito Exemplo
Math.round() Arredondar para o inteiro mais próximo Math.round(4.6) → 5
Math.floor() Arredondar para baixo Math.floor(4.9) → 4
Math.ceil() Arredondar para cima Math.ceil(4.1) → 5
Math.random() Número aleatório 0–1 Math.random() → 0.3721...
Math.max() Valor máximo Math.max(1,5,3) → 5
Math.min() Valor mínimo Math.min(1,5,3) → 1
Math.PI Pi 3.141592653589793
Math.abs() Valor absoluto Math.abs(-7) → 7
Math.pow() Exponenciação Math.pow(2,3) → 8
Math.sqrt() Raiz quadrada Math.sqrt(16) → 4

▶ Exemplo: Métodos Comuns do Math

▶ Experimente
💡 Dica: Math.round(-1.5) retorna -1, não -2. O comportamento de arredondamento no limite negativo pode não corresponder à sua intenção — tenha isso em mente.


5. toFixed() — Formatando Decimais

toFixed(n) formata um número para n casas decimais e retorna uma string:

HTML
<script>
let price = 9.9;
price.toFixed(2);    // "9.90"  ← Nota: retorna uma string
+(9.9).toFixed(2);   // 9.9     ← Use + para converter de volta para número
</script>
⚠️ Nota: toFixed retorna uma string! Se você precisa fazer mais cálculos com ele, lembre-se de converter de volta para número.


6. toString() — Conversão de Base

O método de número toString(radix) converte um número para uma string na base especificada:

HTML
<script>
(255).toString(16);   // "ff"  hexadecimal
(255).toString(2);    // "11111111"  binário
(255).toString(8);    // "377"  octal
(100).toString();     // "100"  decimal (padrão)
</script>

▶ Exemplo: Conversão de Base

▶ Experimente

7. Math.random() — Gerando Números Aleatórios

Math.random() retorna um número de ponto flutuante aleatório entre 0 (inclusivo) e 1 (exclusivo). Na prática, você frequentemente precisa de um número inteiro aleatório dentro de um intervalo específico:

HTML
<script>
// Gerar um inteiro aleatório entre min e max (inclusivo)
function getRandomInt(min, max) {
  return Math.floor(Math.random() * (max - min + 1)) + min;
}
</script>

▶ Exemplo: Demonstração de Números Aleatórios

▶ Experimente
💡 Dica: Math.random() produz números pseudo-aleatórios e não é adequado para fins criptográficos. Para aleatoriedade criptograficamente segura, use crypto.getRandomValues().


Métodos matemáticos:Number.isNaN() Math.random() Math.floor() Math.round() Math.ceil() Math.abs() Math.max() Math.min() Math.pow() isFinite() toFixed() Number() parseInt Math

❓ Perguntas Frequentes

P Quanto são Math.round(2.5) e Math.round(-2.5) respectivamente?
R Math.round(2.5) é 3, e Math.round(-2.5) é -2. Quando o decimal é exatamente .5, JavaScript arredonda em direção ao infinito positivo — então tanto números positivos quanto negativos arredondam para cima (mais próximos de 0).
P Como verifico se um valor é um número válido e finito?
R Use Number.isFinite(valor). Ele exclui NaN, Infinity e -Infinity, e também rejeita tipos não numéricos. O isFinite() global também funciona, mas não verifica o tipo (faz coerção primeiro).
P Qual a diferença entre parseInt e Number()?
R parseInt('12abc') retorna 12 — ele analisa da esquerda para a direita até não poder continuar. Number('12abc') retorna NaN — a string inteira deve ser um número válido. Use parseInt para análise tolerante e Number() para conversão estrita.

📖 Resumo


📝 Exercícios

  1. Escreva um programa que recebe o raio de um círculo como entrada, calcula sua área e circunferência, e exibe os resultados arredondados para 2 casas decimais.
  2. Escreva um jogo de adivinhação de números: o programa gera aleatoriamente um inteiro entre 1 e 100, o usuário insere palpites, e o programa responde com "Muito alto" ou "Muito baixo" até encontrar a resposta correta.
  3. Escreva um conversor de base: insira um número decimal e exiba simultaneamente seus equivalentes binário, octal e hexadecimal.
Web-Tutorial.com

Equipe Técnica Web-Tutorial

Uma plataforma de tutoriais mantida por diversos desenvolvedores. Cada tutorial é escrito e revisado por profissionais da área correspondente. Trabalhamos para manter nosso conteúdo preciso e confiável — se encontrar algum problema, avise-nos.

100%