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)
;