Случайное число от 0
Чтобы получить случайное число от 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 обе формулы дают одинаковый результат.
Материал рассматривает синтаксис JavaScript по стандарту ECMAScript 2026. Все примеры кода можно выполнить в консоли браузера или среде Node.js.
Калькулятор выше принимает нижнюю границу (по умолчанию 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?
Почему формула для целого числа содержит +1?
Как получить случайное дробное число от 0 с точностью до двух знаков?
Подходит ли Math.random() для генерации паролей?
Можно ли получить случайное число от 0 до 1 включительно?
Почему индексы массивов через Math.random() не должны выходить за границы?
Похожие калькуляторы и статьи
- Рандомный код: генерация случайных чисел в JavaScript
- Случайное натуральное число: генерация и формулы
- Заполнить случайными числами: онлайн и в коде
- Рандомный день – международный праздник генератора случайных чисел
- Что такое рандомное число: генераторы, алгоритмы и применение
- Калькулятор систем счисления – перевод чисел онлайн