Olá, Miguel.
O Math.random()
sempre retorna um número entre 0 e 1.
Um detalhe é que o 1 não é incluso então, na verdade, o valor será entre 0 e 0.999999999999999.
Na minha máquina, rodei aqui três vezes e retornou:
0.2524460143399052
0.5888968350562254
0.8256797596159642
O que acontece se eu multiplicar por 10?
Ficaria:
2.524460143399052
5.888968350562254
8.256797596159642
Perceba que ainda temos as casas decimais.
E se usarmos junto com o Math.round()
? Ele remove as casas decimais, transformando no número inteiro mais próximo. Ou seja, arredonda.
Tem uma regra interessante: se a casa decimal for menor de .5, arredonda pra baixo. Se for maior ou igual a .5, arredonda pra cima.
Nos meus exemplos acima, o que aconteceria?
Se não multiplicarmos por 10, teríamos:
0
1
1
O primeiro número tem a casa decimal abaixo de .5, então é arredondado pra baixo. Aí, fica o 0. Os dois seguinte são acima de .6, então são arrendondados pra cima. Por isso o 1.
A casa decimal de 0.2524460143399052 é .25244... que é menor que .5 então vai pra 0.
Já a casa decimal de 0.5888968350562254 é .5888... que é maior que .5 então vai 1.
A mesma coisa pro 0.8256797596159642.
Se consideremos o exemplo multiplicado por 10, teríamos:
3
6
8
Perceba que o resultado muda!
2.524460143399052 tem .5244... de casa decimal, que é maior que .5. Então vai pra cima a parte inteira e vira 3.
O 5.888968350562254 faz a mesma coisa e vai pra 6.
Já o 8.256797596159642 tem .2567... de casa decimal, que é menor que .5. Então o 8 é mantido!