Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Dúvida] Math.floor e Math.random

Vou dar um exemplo do que é minha dúvida:

//Vamos supor que queremos gerar um número aleatório entre 1 e 10

let numeroMaximo = 10;

let numeroSorteado = parseInt(Math.random() * numeroMaximo + 1); //De uma forma simples, conseguimos gerar um número aleatório entre 1 e 10.

//Agora iremos usar o mesmo valor para gerar um número aleatório, mas usando o Math.floor

let max = 10;
let min = 1;

let numeroSorteado = Math.floor(Math.random() * (max - min + 1) + min);

Minha pergunta é, POR QUE?? Me corrijam se eu estiver errado e me expliquem por favor! Pois não consigo entender o porque de usar uma função muito mais "cheio de volta" do que usar uma outra muito mais simples???

Pois reparem

(max - min + 1) + min = 10 - 1 + 1 = 10 + 1 //Math.floor

10 + 1 //Math.random

2 respostas

Oi, João

Não tem diferença usar:

// Gerar um número aleatório entre 1 e 10
let numeroMaximo = 10;

let numeroSorteado1 = parseInt(Math.random() * numeroMaximo + 1);
// ou
let numeroSorteado2 = Math.floor(Math.random() * numeroMaximo + 1);

Agora. Quando vc quer usar valores mínimo e máximo. Vc usa a fórmula completa

// Gerar um número aleatório entre 18 e 30
let max = 30;
let min = 18;

let numeroSorteado1 = Math.floor(Math.random() * (max - min + 1) + min);
// ou
let numeroSorteado2 = parseInt(Math.random() * (max - min + 1) + min);

Ps.:

O Math.random() é para gerar um número aleatório entre 0 e 1.

solução!

Boa noite João!

Primeiramente vamos entender as diferenças entre o parseInt e o Math.floor e Number. As 3 funções são usadas para fazer conversões, mas há diferenças importes entre elas.

Number(): Propósito: Converte um valor para o tipo numérico. Comportamento: Transforma uma string de dígitos em um número. Se a string contiver caracteres não numéricos, retorna NaN. Distingue entre números inteiros e decimais. Aceita notação exponencial (por exemplo, 1e3 é convertido para 1000). Exemplo:

Number('123'); // 123
Number('12.34'); // 12.34

Math.floor(): Propósito: Arredonda um número para o menor inteiro igual ou inferior. Comportamento: Sempre retorna um número inteiro. Não lida com strings. Útil para truncar valores decimais.

Exemplo: Math.floor(12.34); // 12

parseInt(): Propósito: Converte uma string em um número inteiro. Comportamento: Analisa os primeiros dígitos até encontrar um caractere não numérico. Pode converter em diferentes bases (decimal, octal, binário). Pára de analisar quando encontra letras. Retorna NaN se não puder converter. Exemplo:

parseInt('123'); // 123
parseInt('0123abc'); // 123 (ignora letras)
parseInt('1e3', 32); // 1475 (base 32)

Em resumo:

Use Number() para conversões gerais de tipo. Use Math.floor() para arredondar para baixo. Use parseInt() para converter strings em inteiros, considerando diferentes bases e evitando erros com notação exponencial

No seu exemplo o Math.floor é usado pois o calculo mais complexo pode retornar um número decimal e você quer garantir q vai obter um número inteiro.