Как получить рандомное число в js
Перейти к содержимому

Как получить рандомное число в js

  • автор:

Как получить рандомное число в js

Напишите функцию randomInteger(min, max) , которая генерирует случайное целое (integer) число от min до max (включительно).

Любое число из интервала min..max должно появляться с одинаковой вероятностью.

Пример работы функции:

alert( randomInteger(1, 5) ); // 1 alert( randomInteger(1, 5) ); // 3 alert( randomInteger(1, 5) ); // 5

Можно использовать решение из предыдущей задачи.

Простое, но неправильное решение

Простое, но неправильное решение

Самое простое, но неправильное решение – генерировать случайное число от min до max и округлять его:

function randomInteger(min, max) < let rand = min + Math.random() * (max - min); return Math.round(rand); >alert( randomInteger(1, 3) );

Функция будет работать, но неправильно. Вероятность получить min и max значения в 2 раза меньше, чем любое другое число.

Если вы запустите приведённый выше пример, то заметите, что 2 появляется чаще всего.

Это происходит потому, что метод Math.round() получает случайные числа из интервала 1..3 и округляет их следующим образом:

число от 1 . до 1.4999999999 округлится до 1 число от 1.5 . до 2.4999999999 округлится до 2 число от 2.5 . до 2.9999999999 округлится до 3

Теперь становится понятно, что 1 получает в 2 раза меньше значений, чем 2 . То же самое с 3 .

Правильное решение задачи

Правильное решение задачи

Есть много правильных решений этой задачи. Одно из них – использовать Math.floor для получения случайного числа от min до max+1 :

function randomInteger(min, max) < // случайное число от min до (max+1) let rand = min + Math.random() * (max + 1 - min); return Math.floor(rand); >alert( randomInteger(1, 3) );

Теперь все интервалы отображаются следующим образом:

число от 1 . до 1.9999999999 округлится до 1 число от 2 . до 2.9999999999 округлится до 2 число от 3 . до 3.9999999999 округлится до 3

Все интервалы имеют одинаковую длину, что выравнивает вероятность получения случайных чисел.

Math.random()

Math.random() — это функция встроенного объекта Math , которая возвращает псевдослучайное число с плавающей запятой из диапазона от 0 включительно, до 1 не включительно.

Синтаксис

 Math.random() 

У метода нет параметров.

Опубликуем результат в console.

 let randomNumber = Math.random() console.log(randomNumber) // или просто console.log(Math.random()) 

Math.random()

Особенности генерации случайных чисел

1. Math.random() генерирует случайные числа на основе алгоритма, который в итоге можно просчитать, поэтому метод не подходит там, где речь идет о безопасности.

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

3. Math.random() формирует числа похожие на 0.6592126750964376 или 0.4571938784553331. В дальнейшем результат масштабируются до нужного формата и диапазона.

4. Результатом метода может быть ноль, но единица никогда.

5. В сферах связанных с безопасностью рекомендуется использовать Web Cryptography API и его методы getRandomValues() и generateKey() .

Случайное число в диапазоне

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

 function getRandomNumber(min, max)

getRandomNumber(0.1, 0.2)

Целое число в диапазоне

Получаем целое число от минимума (включительно) до максимума (не включительно)

 function getRandomNumber(min, max)
 function getRandomNumber(min, max)

ceil() — округляет в большую сторону, floor() в меньшую.

getRandomNumber(1, 4)

Случайное число в диапазоне включительно max

Функция учитывает недостатки предыдущих решений и выводит случайные числа от и до включительно для обоих случаев.

 function getRandomNumber(min, max)
 function getRandomNumber(min, max)
 function getRandomNumber(min, max)

round() — округляет до ближайшего целого.

getRandomNumber(1, 4)

Итого

Math.random() генерирует псевдослучайное число от 0 до 1 (не включительно). Метод не содержит параметров, а его результаты удобно форматировать, тем самым получая случайные целые или дробные числа в необходимом диапазоне.

Skypro — научим с нуля

Math.random()

Статический метод Math.random() возвращает псевдослучайное число с плавающей запятой, которое больше или равно нулю и меньше единицы с приблизительно равномерным распределением в этом диапазоне. В дальнейшем это число можно «отмасштабировать», привести к нужному диапазону. Выбор начального числа для алгоритма генерации случайных чисел происходит автоматически (зависит от реализации) и не может быть изменён пользователем.

Примечание: метод Math.random() не предоставляет криптографически стойкие случайные числа. Не используйте его ни для чего, связанного с безопасностью. Для таких целей используйте Web Crypto API и более точный метод window.crypto.getRandomValues() .

Интерактивный пример

Синтаксис

.random() 

Параметры

Возвращаемое значение

Псевдослучайное число с плавающей запятой от 0 (включительно) до 1 (не включая).

Примеры

Обратите внимание, что поскольку числа в JavaScript являются числами с плавающей запятой стандарта IEEE 754 с округлением к ближайшему чётному, используемые в приведённых функциях диапазоны (исключая диапазон с простым вызовом Math.random() ), не точны. Если заданы очень большие границы (2 53 или выше), возможен крайне редкий случай достижения обычно исключённой верхней границы.

Получение случайного числа от 0 (включительно) до 1 (не включая)

function getRandom()  return Math.random(); > 

Получение случайного числа в заданном интервале

Этот пример возвращает случайное число в заданном интервале. Возвращаемое значение не менее (и может быть равно) min и не более (и не равно) max .

function getRandomArbitrary(min, max)  return Math.random() * (max - min) + min; > 

Получение случайного целого числа в заданном интервале

Этот пример возвращает случайное целое число в заданном интервале. Возвращаемое значение не менее min (или следующее целое число, которое больше min , если min не целое) и не более (но не равно) max .

function getRandomInt(min, max)  min = Math.ceil(min); max = Math.floor(max); return Math.floor(Math.random() * (max - min) + min); // Максимум не включается, минимум включается > 

Примечание: Может показаться заманчивым использовать Math.round() для округления, но это может сделать распределение неравномерным и оказаться не тем, что вам нужно.

Получение случайного целого числа в заданном интервале, включительно

Функция getRandomInt() выше включает минимальное значение, но не включает максимальное. Но что если вам нужно, чтобы включалось и минимальное, и максимальное значение? Функция getRandomIntInclusive() решает этот вопрос.

function getRandomIntInclusive(min, max)  min = Math.ceil(min); max = Math.floor(max); return Math.floor(Math.random() * (max - min + 1) + min); // Максимум и минимум включаются > 

Спецификации

Specification
ECMAScript Language Specification
# sec-math.random

Совместимость с браузерами

BCD tables only load in the browser

Смотрите также

Found a content problem with this page?

  • Edit the page on GitHub.
  • Report the content issue.
  • View the source on GitHub.

This page was last modified on 11 дек. 2023 г. by MDN contributors.

Your blueprint for a better internet.

MDN

Support

  • Product help
  • Report an issue

Our communities

Developers

  • Web Technologies
  • Learn Web Development
  • MDN Plus
  • Hacks Blog
  • Website Privacy Notice
  • Cookies
  • Legal
  • Community Participation Guidelines

Visit Mozilla Corporation’s not-for-profit parent, the Mozilla Foundation.
Portions of this content are ©1998– 2024 by individual mozilla.org contributors. Content available under a Creative Commons license.

Метод Math.random

Метод Math.random возвращает случайное дробное число от 0 до 1 .

Синтаксис

Math.random();

Применение

Чтобы получить случайное число в определенном промежутке (дробное или целое) следует пользоваться специальными приемами. Получение случайного дробного числа между min и max происходит так:

function getRandomArbitary(min, max) < return Math.random() * (max - min) + min; >

А теперь получим случайное целое число между min и max :

function getRandomInt(min, max) < return Math.floor(Math.random() * (max - min + 1)) + min; >

Пример

Давайте выведем случайное число от 0 до 1 :

console.log(Math.random());

Результат выполнения кода:

0.5416665468657356

Пример

Давайте выведем случайное целое число от 10 до 100 :

function getRandomInt(min, max) < return Math.floor(Math.random() * (max - min + 1)) + min; >console.log(getRandomInt(10, 100));

Результат выполнения кода:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *