Números e matemática

Um carrinho de compras soma preços, um jogo rastreia uma pontuação, um formulário calcula quanto imposto cobrar. Tudo se resume a números e fazer aritmética com eles. JavaScript trata números como um dos seus blocos de construção principais, e este capítulo é sobre o que você pode fazer com eles: a matemática do dia a dia, os auxiliares integrados para arredondamento e aleatoriedade, e a parte que pega quase todo mundo, transformar texto digitado em uma página de volta em um número que você pode somar.
Números e aritmética
JavaScript tem um tipo number, e ele cobre tudo. Números inteiros como 42 e decimais como 9.99 são o mesmo tipo de valor, então você nunca escolhe entre eles:
const price = 9.99;
const quantity = 3;
const total = price * quantity;
console.log(total); // 29.97Você faz matemática com os símbolos que já conhece: + adiciona, - subtrai, * multiplica, e / divide. Há mais um que é menos familiar, %, o resto. Ele dá o que sobra após dividir:
const remainder = 7 % 2;
console.log(remainder); // 1Sete dividido por dois é três com um deixado, então 7 % 2 é 1. É assim que você verifica se um número é par: um número par dividido por dois não deixa nada, então number % 2 é 0 para números pares e 1 para ímpares.
number em JavaScript, então números inteiros e decimais são a mesma coisa e você nunca escolhe entre eles. Os operadores são + - * / mais %, o resto, que é o que sobra após dividir. O truque prático é % 2: é 0 para números pares e 1 para ímpares. O objeto Math
Quando você precisa de mais que os operadores básicos, JavaScript te dá Math, uma coleção integrada de auxiliares de matemática. Você as chama pelo nome com um ponto:
console.log(Math.round(4.6)); // 5
console.log(Math.floor(4.6)); // 4
console.log(Math.ceil(4.1)); // 5Math.round arredonda para o número inteiro mais próximo, Math.floor sempre arredonda para baixo, e Math.ceil sempre arredonda para cima. Há também Math.max e Math.min, que escolhem o maior ou o menor dos números que você dá a eles:
console.log(Math.max(3, 8, 5)); // 8
console.log(Math.min(3, 8, 5)); // 3E Math.random, que dá um decimal aleatório de 0 até (mas não incluindo) 1. Por si só isso é raramente o que você quer, então a receita comum é multiplicar por ele e arredondar para baixo para obter um número inteiro aleatório:
const roll = Math.floor(Math.random() * 6) + 1;
console.log(roll); // 4 (um número diferente cada vez)Math.random() * 6 cai em algum lugar de 0 até 6, Math.floor o cai para um número inteiro de 0 a 5, e + 1 o desloca para um lançamento de dado de 1 a 6.
Math é uma caixa de ferramentas pronta de auxiliares de matemática que você chama com um ponto: Math.round, Math.floor (para baixo), Math.ceil (para cima), e Math.max / Math.min para o maior e o menor. Math.random dá um decimal de 0 até 1, e a receita que vale memorizar é Math.floor(Math.random() * n) para um número inteiro aleatório. Levei algumas tentativas para confiar nesse padrão, então copie e leia lentamente. Transformar strings em números
Qualquer coisa que uma pessoa digita em uma página chega como text, mesmo quando parece um número. Digite 5 em uma caixa e você obtém a string "5", não o número 5. Isso importa porque + em duas strings as une em vez de adicionar:
const a = "5";
const b = "3";
console.log(a + b); // "53", não 8Para fazer matemática, você converte o texto em um número primeiro. A maneira mais clara é Number():
const count = Number("5");
console.log(count + 3); // 8Há duas mais que você verá: parseInt lê um número inteiro e descarta qualquer decimal, e parseFloat mantém o decimal:
console.log(parseInt("42px")); // 42
console.log(parseFloat("9.99")); // 9.99Ambas podem ler um número sentado no início de algum texto, como "42px", que Number não pode. Há também um atalho, um + na frente de uma string, que a converte do mesmo jeito que Number faz:
console.log(+"7"); // 7"5" não é o número 5, e "5" + "3" dá "53" em vez de 8. Converta primeiro: Number("5") é o mais claro, parseInt lê um número inteiro, parseFloat mantém decimais, e um + na frente de uma string é um atalho rápido. Observe a armadilha de unir-em-vez-de-adicionar, ela pega todo mundo uma vez. As arestas afiadas dos números
Números em JavaScript têm uma surpresa que vale a pena ver uma vez, cedo. Adicione dois decimais simples e você pode obter uma resposta estranha:
console.log(0.1 + 0.2); // 0.30000000000000004Isso não é um bug no seu código. Computadores armazenam decimais de uma forma que não pode representar cada valor exatamente, então um erro minúsculo se esgueira. Raramente importa, e quando importa, você arredonda o resultado para exibição:
const sum = 0.1 + 0.2;
console.log(Math.round(sum * 100) / 100); // 0.3Você também encontrará um valor chamado NaN, abreviação de "não é um número". Você obtém quando uma operação de matemática não tem resposta sensata, como tentar transformar texto sem sentido em um número:
console.log(Number("hello")); // NaNVer NaN em sua saída geralmente significa que uma conversão deu errado em algum lugar, então é uma pista útil em vez de algo a temer.
0.1 + 0.2 sai como 0.30000000000000004, que é normal, não um bug no seu código. Quando importa, arredonde o resultado antes de mostrá-lo. E NaN significa "não é um número", a resposta que você obtém quando uma conversão falha, então trate como uma pista que algum texto não se transformou em um número do jeito que você esperava. Para onde números vão em seguida
Números são um de alguns tipos de dados principais em JavaScript, sentando ao lado de texto e valores verdadeiro/falso. A maioria dos programas reais os misturam, puxando um número de uma string, comparando, armazenando o resultado em uma variável, e os operadores que fazem essa comparação e combinação são o assunto de operadores em seguida.

