sequencial - sorteio em javascript




Gere um número aleatório entre dois números em JavaScript (12)

Math.random()

Da documentação da Math.random() Developer Network:

// Returns a random integer between min (include) and max (include)

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

Exemplos úteis:

// 0 -> 10
Math.floor(Math.random() * 11);

// 1 -> 10
Math.floor(Math.random() * 10) + 1;

// 5 -> 20
Math.floor(Math.random() * 16) + 5;

// -10 -> (-2)
Math.floor(Math.random() * 9) - 10;

Existe uma maneira de gerar um número aleatório em um intervalo especificado (por exemplo, de 1 a 6: 1, 2, 3, 4, 5 ou 6) em JavaScript?


A matemática não é o meu ponto forte, mas tenho trabalhado em um projeto onde precisei gerar muitos números aleatórios entre positivos e negativos.

function randomBetween(min, max) {
    if (min < 0) {
        return min + Math.random() * (Math.abs(min)+max);
    }else {
        return min + Math.random() * max;
    }
}

Por exemplo

randomBetween(-10,15)//or..
randomBetween(10,20)//or...
randomBetween(-200,-100)

Naturalmente, você também pode adicionar alguma validação para garantir que não faça isso com nada além de números. Também certifique-se de que min é sempre menor ou igual a max.


Em vez de Math.random() , você pode usar crypto.getRandomValues() para gerar números aleatórios criptograficamente seguros distribuídos uniformemente. Aqui está um exemplo:

function randInt(min, max) {
  var MAX_UINT32 = 0xFFFFFFFF;
  var range = max - min;

  if (!(range <= MAX_UINT32)) {
    throw new Error(
      "Range of " + range + " covering " + min + " to " + max + " is > " +
      MAX_UINT32 + ".");
  } else if (min === max) {
    return min;
  } else if (!(max > min)) {
    throw new Error("max (" + max + ") must be >= min (" + min + ").");
  }

  // We need to cut off values greater than this to avoid bias in distribution
  // over the range.
  var maxUnbiased = MAX_UINT32 - ((MAX_UINT32 + 1) % (range + 1));

  var rand;
  do {
    rand = crypto.getRandomValues(new Uint32Array(1))[0];
  } while (rand > maxUnbiased);

  var offset = rand % (range + 1);
  return min + offset;
}

console.log(randInt(-8, 8));          // -2
console.log(randInt(0, 0));           // 0
console.log(randInt(0, 0xFFFFFFFF));  // 944450079
console.log(randInt(-1, 0xFFFFFFFF));
// Uncaught Error: Range of 4294967296 covering -1 to 4294967295 is > 4294967295.
console.log(new Array(24).fill().map(n => randInt(8, 12)));
// [11, 8, 8, 11, 10, 8, 8, 12, 12, 12, 9, 9,
//  11, 8, 11, 8, 8, 8, 11, 9, 10, 12, 9, 11]
console.log(randInt(10, 8));
// Uncaught Error: max (8) must be >= min (10).


Eu encontrei a solução de Francisc acima não incluiu o número mínimo ou máximo nos resultados, então eu alterei assim:

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

Eu estava pesquisando gerador de números aleatórios escrito em TypeScript e eu escrevi isso depois de ler todas as respostas, espero que funcionaria para codificadores de TypeScript.

    Rand(min: number, max: number): number {
        return (Math.random() * (max - min + 1) | 0) + min;
    }   

Exemplo

Retornar um número aleatório entre 1 e 10:

Math.floor((Math.random() * 10) + 1);

O resultado poderia ser: 3

Tente você mesmo: here

-

ou usando lodash / undescore:

_.random(min, max)

Documentos: - lodash.com/docs#random - Underscore


Outras soluções:

  • (Math.random() * 6 | 0) + 1
  • ~~(Math.random() * 6) + 1

Para criar um número aleatório em javascript, podemos usar o objeto Math javascript. O objeto Math contém uma função Math.random() . Esta função faz o seguinte (fonte MDN):

A função Math.random () retorna um número pseudo-aleatório de ponto flutuante no intervalo de 0 a 1 (inclusive 0, mas não 1) com distribuição aproximadamente uniforme sobre esse intervalo - que você pode dimensionar para o intervalo desejado.

Dada essa funcionalidade, podemos facilmente escalar isso em cenários mais complexos. Por exemplo:

function randomNR (x, y){
return Math.round((Math.random() * x + y));
}

// dice >> random number between 1-6
// dice functionality without function >> Math.round((Math.random() * 5 + 1))
console.log(randomNR(5,1));


// coin >> random number between 0-1
// coin functionality without function >> Math.round((Math.random() * 1))
console.log(randomNR(1,0))


Sentir que você precisa adicionar 1 ao número máximo e, em seguida, subtrair o número mínimo para que nada disso funcione, e eu preciso fazer um monte de números inteiros aleatórios, esta função funciona.

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

Isso funciona com números negativos e positivos, e estou trabalhando em decimais para uma biblioteca.


jsfiddle: https://jsfiddle.net/cyGwf/477/

Random Integer : para obter um número inteiro aleatório entre min e max , use o seguinte código

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

Número de Ponto Flutuante Aleatório : para obter um número de ponto flutuante aleatório entre min e max , use o seguinte código

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

Referência: Math.random()


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

function randomIntFromInterval(min,max) // min and max included
{
    return Math.floor(Math.random()*(max-min+1)+min);
}

O que ele faz "extra" é que ele permite intervalos aleatórios que não começam com 1. Assim, você pode obter um número aleatório de 10 a 15, por exemplo. Flexibilidade.





random