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

[Bug] função para gerar número aleatorio não funciona

Meu codigo:

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

    let numero = obterNumeroAleatorio(de, ate);
    alert(numero);
}

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

existe algum erro que não estou vendo? Pois está gerando números aleatórios maiores que o max. já quando utilizo esse codigo:

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

as coisa correm como o esperado, o que pode está acontecendo?

1 resposta
solução!

Olá João,

No seu codigo falta garantir que os numeros "salvos" sejam numeros inteiros, então conforme abaixo voce pode usar o metodo parseInt(). Assim ele converte a string capturada para um numero inteiro. Sem essa conversão ele tenta fazer os cálculos como uma string, e dessa forma ele não realiza as contas e sim realiza uma concatenação de caracteres, por isso parece que ele esta gerando números maiores que o máximo.

No outro código isso não acontece porque antes de fazer o calculo com Math.random, ele ja faz a conversão utilizando as funções Math.ceil() e Math.floor()

Qualquer duvida estou a disposiçã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 = obterNumeroAleatorio(de, ate);
    alert(numero);
}

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