Обновлено:
Случайное число от 0
Материал рассматривает синтаксис JavaScript по стандарту ECMAScript 2026. Все примеры кода можно выполнить в консоли браузера или среде Node.js.
Чтобы получить случайное число от 0 до заданного предела в JavaScript, комбинируют метод Math.random() с математическим округлением. Встроенная функция возвращает псевдослучайное дробное значение от 0 (включительно) до 1 (не включительно), которое затем масштабируют на нужный диапазон.
Как сгенерировать случайное целое число от 0 до max?
Для диапазона, начинающегося с нуля, используется сокращённая формула:
function randomInt(max) {
return Math.floor(Math.random() * (max + 1));
}
Пошаговая логика работы:
Math.random()выдаёт число от 0 до 0,999…- Умножение на
(max + 1)растягивает диапазон до длины max + 1 возможных значений. Math.floor()округляет вниз до ближайшего целого.- Результат – целое число от 0 до max включительно.
Примеры:
randomInt(10); // 0 … 10
randomInt(99); // 0 … 99
randomInt(0); // всегда 0
Если нижняя граница отлична от нуля, применяют универсальную запись:
function randomIntMinMax(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
При min = 0 обе формулы дают одинаковый результат.
Калькулятор выше принимает нижнюю границу (по умолчанию 0), верхнюю границу, тип значения – целое или дробное – и количество знаков после запятой. Логика расчёта повторяет описанные формулы: для целых чисел используется округление вниз с учётом включённой верхней границы, для дробных – масштабирование с последующим ограничением точности.
Почему Math.random() всегда меньше 1?
Стандарт ECMAScript жёстко фиксирует диапазон: 0 ≤ x < 1 (описание на MDN). Верхняя граница исключается намеренно. Это защищает от выхода за пределы массива при генерации индексов.
Например, при выборе случайного элемента из массива длиной 10:
const items = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'];
const index = Math.floor(Math.random() * items.length);
Если бы Math.random() мог дать ровно 1, результат умножения стал бы 10, что выходит за пределы индексов 0–9 и вернёт undefined.
Генерация дробного числа от 0 с заданной точностью
Если нужно не целое, а дробное значение – например, случайный процент или координата – применяют прямое масштабирование:
function randomFloat(max) {
return Math.random() * max;
}
Чтобы зафиксировать количество знаков после запятой:
function randomFloatFixed(max, decimals = 2) {
const num = Math.random() * max;
return parseFloat(num.toFixed(decimals));
}
Примеры:
randomFloatFixed(1, 2); // 0.00 … 0.99
randomFloatFixed(100, 2); // 0.00 … 99.99
randomFloatFixed(5.5, 2); // 0.00 … 5.49
Метод .toFixed() возвращает строку, поэтому результат приводят к числу через parseFloat().
Практические сценарии
Выбор случайного элемента массива
Индекс формируется через длину массива:
const colors = ['#ff0000', '#00ff00', '#0000ff'];
const randomColor = colors[Math.floor(Math.random() * colors.length)];
Случайный процент от 0 до 100
const percent = parseFloat((Math.random() * 100).toFixed(2));
Случайные координаты в пределах canvas
const x = Math.floor(Math.random() * canvasWidth);
const y = Math.floor(Math.random() * canvasHeight);
Псевдослучайные и криптостойкие значения
Math.random() работает на алгоритме PRNG (Pseudo-Random Number Generator). Последовательность «случайных» чисел определяется внутренним начальным состоянием (seed) и при желании может быть воспроизведена. Этого достаточно для анимаций, игр и моковых данных, но недостаточно для безопасности.
Для криптографически стойкой генерации используют window.crypto.getRandomValues() в браузере или модуль crypto в Node.js:
const array = new Uint32Array(1);
window.crypto.getRandomValues(array);
const secureRandom = array[0] / (0xffffffff + 1);
Этот метод не стартует от предсказуемого сида и подходит для токенов, сессий и случайных паролей.
Типичные ошибки
- Забыли +1:
Math.floor(Math.random() * max)никогда не вернётmax, только диапазон от 0 до max − 1. - Использование
Math.round()вместоMath.floor(): при округлении до ближайшего числа крайние значения выпадают реже, чем остальные, из-за неравномерного распределения. - Парсинг строки без приведения к числу:
toFixed()возвращает строку, и арифметические операции с ней могут дать неожиданный результат, если не использоватьparseFloat().
Используйте Math.floor() для целых чисел и явно контролируйте верхнюю границу диапазона – так результат всегда будет предсказуемо точным.
Часто задаваемые вопросы
Может ли Math.random() вернуть ровно 0?
Теоретически да, но на практике вероятность бесконечно мала. Метод генерирует число в диапазоне от 0 (включительно) до 1 (не включительно), поэтому ноль возможен, но практически не встречается.
Почему формула для целого числа содержит +1?
Без единицы верхняя граница диапазона никогда не выпадет, так как Math.random() строго меньше 1. Умножение на (max + 1) создаёт диапазон длиной max + 1 возможных значений от 0 до max включительно.
Как получить случайное дробное число от 0 с точностью до двух знаков?
Сгенерируйте значение через Math.random() * max, а затем округлите до нужного количества знаков методом toFixed() и приведите к числу parseFloat().
Подходит ли Math.random() для генерации паролей?
Нет. Это псевдослучайный генератор, предсказуемый при известном начальном состоянии. Для паролей, токенов и криптографии используйте window.crypto.getRandomValues().
Можно ли получить случайное число от 0 до 1 включительно?
Стандартным Math.random() – нет, так как верхняя граница всегда исключается. Если нужна единица, используйте собственную логику проверки крайне малой вероятности или другой алгоритм.
Почему индексы массивов через Math.random() не должны выходить за границы?
При выборе элемента из массива длиной N индекс формируется как Math.floor(Math.random() * N). Это даёт ровно N вариантов от 0 до N − 1, что корректно для всех элементов массива.
Похожие калькуляторы и статьи
- Рандомный код: генерация случайных чисел в JavaScript
- Случайное натуральное число: генерация и формулы
- Заполнить случайными числами: онлайн и в коде
- Рандомный день – международный праздник генератора случайных чисел
- Что такое рандомное число: генераторы, алгоритмы и применение
- Калькулятор систем счисления – перевод чисел онлайн