Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Dúvida] parseInt

Ao usar o código a seguir, é gerado numeros que não fazem sentido, por exemplo colocando no site index respectivo da aula no campo "do numero" o numero 2 e no campo "até o numero" o numero 4, ele gera os seguintes numeros: 02, 12 e 22. Colocando outros numeros nesses campos gera o mesmo problema.

function sortear()
{
    let quantidade = document.getElementById('quantidade').value;
    let de = document.getElementById('de').value;
    let ate = document.getElementById('ate').value;
    let numero = numeroAleatorio (de, ate)

     alert(numero)
}

function numeroAleatorio (min, max)
{
    return Math.floor(Math.random() * (max - min + 1)) + min;
}

Mas ao usar o mesmo código apenas com o "parseInt" antes do getElementById, como estarei colocando a seguir, ele da certo e gera o numero aleatorio dentro do esperado. Não entendi como nem porque isso acontece, se alguem conseguir explicar agradeço.

function sortear()
{
    let quantidade = parseInt(document.getElementById('quantidade').value);
    let de = parseInt(document.getElementById('de').value);
    let ate = parseInt(document.getElementById('ate').value);
    let numero = numeroAleatorio (de, ate)

     alert(numero)
}

function numeroAleatorio (min, max)
{
    return Math.floor(Math.random() * (max - min + 1)) + min;
}
1 resposta
solução!

Oii, Samir! Como vai?

Vamos entender o "porquê" desse comportamento curioso de gerar "02", "12" ou "22".

1. O que vem do HTML?
Quando usamos document.getElementById('...').value, o JavaScript recupera exatamente o que tá escrito no campo, mas ele sempre considera isso como um texto (String), mesmo que seja um número.

  • Se você digita 2, o computador lê "2" (texto).
  • Se você digita 4, o computador lê "4" (texto).

2. A "mágica" (e o perigo) do JavaScript
Na sua fórmula matemática, acontece algo interessante:
Math.random() * (max - min + 1)

  • Quando o JavaScript vê uma subtração (-) ou multiplicação (*), ele tenta ser "amigo" e converte os textos em números para fazer a conta. Por isso max - min funciona (4 - 2 = 2).
  • O resultado dessa primeira parte da conta será um número (vamos supor que o sorteio resultou em 0, 1 ou 2).

3. O problema do sinal de Mais (+)
O problema está no finalzinho da fórmula: ... + min.
O sinal + serve para somar números, mas também serve para juntar textos (concatenar).

Como você não usou o parseInt, o seu min ainda é o texto "2".
Então, o JavaScript pensa: "Ele quer somar um número com um texto? Vou juntar os dois!".

Veja o que acontece nos bastidores:

  • Se o sorteio deu 0: 0 + "2" = "02"
  • Se o sorteio deu 1: 1 + "2" = "12"
  • Se o sorteio deu 2: 2 + "2" = "22"

A solução com parseInt()
Quando você usa o parseInt(), você tá obrigando o computador a transformar aquele texto "2" no número 2.
Dessa forma, quando chega no final da fórmula, o JavaScript vê: Número + Número. Aí sim, ele faz a soma matemática correta (ex: 0 + 2 = 2).

Parabéns por testar e notar essa diferença! É testando assim que aprendemos os detalhes da linguagem.

Bons estudos!

Conteúdos relacionados
Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!