DEV Community

Cover image for Gerando números randômicos com vanila JS
doug-source
doug-source

Posted on

Gerando números randômicos com vanila JS

Nota: apenas traduzi o texto abaixo e postei aqui.

Hoje, veremos como criar números randômicos com vanilla JS.

O método Math.random()

O método Math.random() gera um float randômico (um número com decimais) entre 0 e 1.

// Registra algo assim: 0.37111265461165543
// Será diferente a cada vez
var rand = Math.random();
console.log(rand);
Enter fullscreen mode Exit fullscreen mode

O número que o método Math.random() gera inclui 0 (por exemplo, às vezes pode ser 0, embora eu nunca tenha visto isso acontecer pessoalmente), mas exclui 1 (por exemplo, nunca chegará a ser exatamente 1).

Obtendo números maiores que 0

E se você quisesse obter integers, ou inteiramente integers, em vez de float numbers?

Para fazer isso, podemos multiplicar o que Math.random() retornar por um número que seja uma potência de dez. Quanto maior o número pelo qual você multiplica, mais dígitos terá o number retornado.

var randomOverZero = function (pow) {
    return Math.random() * pow;
};

// Loga algo como: 14.48985072988853
var rand100 = randomOverZero(100);
console.log(rand100);

// Loga algo como: 9005.187977724258
var rand10000 = randomOverZero(10000);
console.log(rand10000);
Enter fullscreen mode Exit fullscreen mode

Obtendo um integer randômico

E se você quisesse um integer randômico, ou inteiramente integer, em vez de um float number?

Para isso, podemos usar o método Math.floor() após multiplicar o valor retornado de Math.random() pela nossa potência de dez.

var randomInteger = function (pow) {
    return Math.floor(Math.random() * pow);
};

// Loga algo como: 14
var rand100 = randomInteger(100);
console.log(rand100);

// Loga algo como: 9005
var rand10000 = randomInteger(10000);
console.log(rand10000);
Enter fullscreen mode Exit fullscreen mode

Obtendo um integer randômico entre dois números

Finalmente, vamos ver como obter um integer randômico entre dois números. Por exemplo, digamos que você queira um número que seja pelo menos 5, mas não maior que 42.

Para isso, criaremos uma helper function que aceita um número mínimo e um número máximo, para o número randômico, como arguments.

Então, subtrairemos o mínimo do máximo e adicionaremos 1 a ele (caso contrário, o máximo nunca seria alcançado). Multiplicaremos o valor retornado de Math.random() por este novo número e adicionaremos o mínimo a ele. Isso nos dá um float randômico entre nossos dois valores.

Por fim, usaremos Math.floor() para transformá-lo em um integer e retornar o resultado.

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

// Loga algo como 37
var rand = randomNumber(5, 42);
console.log(rand);
Enter fullscreen mode Exit fullscreen mode

Exemplos da MDN

Apoio à seção de exemplos do MDN para Math.random() por me ajudar a descobrir isso.

// retorno: float => [min, max[
function getRandomArbitrary(min, max) {
  return Math.random() * (max - min) + min;
}

// retorno: integer => [min, max[
function getRandomInt(min, max) {
  min = Math.ceil(min);
  max = Math.floor(max);
  return Math.floor(Math.random() * (max - min) + min);
}

// retorno: integer => [min, max]
function getRandomIntInclusive(min, max) {
  min = Math.ceil(min);
  max = Math.floor(max);
  return Math.floor(Math.random() * (max - min + 1)) + min;
}
Enter fullscreen mode Exit fullscreen mode

Fonte

Top comments (0)