Генерация случайного числа между двумя числами в JavaScript - PullRequest
1541 голосов
/ 10 февраля 2011

Есть ли способ создать случайное число в указанном диапазоне (например, от 1 до 6: 1, 2, 3, 4, 5 или 6) в JavaScript?

Ответы [ 16 ]

1955 голосов
/ 29 августа 2011
function randomIntFromInterval(min,max) // min and max included
{
    return Math.floor(Math.random()*(max-min+1)+min);
}

Что он делает «лишним», так это разрешает случайные интервалы, которые не начинаются с 1. Например, вы можете получить случайное число от 10 до 15. Гибкость.

1891 голосов
/ 10 февраля 2011

Важно

Следующий код работает, только если минимальное значение равно 1.Он не работает для минимальных значений, отличных от 1.

Если вы хотите получить случайное целое число от 1 ( и только 1 ) до 6, вы должны вычислить:

Math.floor(Math.random() * 6) + 1  

Где:

  • 1 - начальный номер
  • 6 - количество возможных результатов (1 + начало (6) - конец (1) )
247 голосов
/ 11 июня 2014

Math.random ()

Из Mozilla Документация для разработчиков:

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

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

Полезные примеры:

// 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;
82 голосов
/ 09 ноября 2011

Другие решения:

  • (Math.random() * 6 | 0) + 1
  • ~~(Math.random() * 6) + 1
47 голосов
/ 03 апреля 2017

TL; DR

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

Чтобы получить случайное число generateRandomInteger(-20, 20);

ОБЪЯСНЕНИЕ НИЖЕ

Нам нужно получить случайное целое число, скажем X между минимальным и максимальным значениями.

Правильно?

т.е. мин <= X <= макс </strong>

Если мы вычтем min из уравнения, это будет эквивалентно

0 <= (X - min) <= (max - min) </strong>

Теперь давайте умножим это на случайное число r что

0 <= (X - min) * r <= (max - min) * r </strong>

Теперь давайте добавим обратно min к уравнению

min <= min + (X - min) * r <= min + (max - min) * r </strong>

Теперь давайте выберем функцию, результатом которой будет r , чтобы она удовлетворяла диапазону наших уравнений как [min, max]. Это возможно только если 0 <= r <= 1 </strong>

OK. Теперь диапазон r , т.е. [0,1] очень похож на результат функции Math.random (). Не так ли?

Функция Math.random () возвращает псевдослучайное число с плавающей точкой число в диапазоне [0, 1); то есть от 0 (включительно) до но не в том числе 1 (эксклюзив)

Например,

Дело г = 0

min + 0 * (max - min) = мин

Дело г = 1

min + 1 * (max - min) = max

Случайный случай с использованием Math.random 0 <= r <1 </h1> min + r * (max - min) = X , где X имеет диапазон мин <= <strong>X <<strong> max Приведенный выше результат X является случайным числом. Однако благодаря Math.random () наша левая граница является включающей, а правая - исключительной. Чтобы включить нашу правую границу, мы увеличиваем правую границу на 1 и получаем результат. function generateRandomInteger(min, max) { return Math.floor(min + Math.random()*(max + 1 - min)) } Чтобы получить случайное число

generateRandomInteger(-20, 20);

20 голосов
/ 03 октября 2014

Или, в Подчеркнуть

_.random(min, max)
19 голосов
/ 25 января 2017

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

Случайное целое число : чтобы получить случайное целое число от min до max, используйте следующий код

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

Случайное число с плавающей запятой : чтобы получить случайное число с плавающей запятой между min и max, используйте следующий код

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

Ссылка: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/random

19 голосов
/ 10 февраля 2011
var x = 6; // can be any number
var rand = Math.floor(Math.random()*x) + 1;
13 голосов
/ 21 марта 2013

Математика не моя сильная сторона, но я работал над проектом, в котором мне нужно было генерировать много случайных чисел между положительным и отрицательным.

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

Например,

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

Конечно, вы также можете добавить некоторую проверку, чтобы убедиться, что вы не делаете это ни с чем, кроме чисел. Также убедитесь, что min всегда меньше или равно max.

8 голосов
/ 10 мая 2015

Я написал более гибкую функцию, которая может дать вам случайное число, а не только целое число.

function rand(min,max,interval)
{
    if (typeof(interval)==='undefined') interval = 1;
    var r = Math.floor(Math.random()*(max-min+interval)/interval);
    return r*interval+min;
}

var a = rand(0,10); //can be 0, 1, 2 (...) 9, 10
var b = rand(4,6,0.1); //can be 4.0, 4.1, 4.2 (...) 5.9, 6.0

Фиксированная версия.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...