← Все вопросы

Как получить случайное целое число в диапазоне на JavaScript?

Задан 17 месяцев назад1.4к просмотров2 ответа
5

Знаю, что есть Math.random(), но он выдаёт что-то вроде 0.5273.... А мне нужно целое, например от 1 до 6 (как кубик). Как правильно?

2 ответа

9
✓ Принятый ответ — помог автору

Math.random() действительно даёт дробь в диапазоне [0, 1). Чтобы получить целое от min до max включительно:

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

randomInt(1, 6); // кубик: 1..6

Как это работает: (max - min + 1) — сколько всего вариантов, Math.random() * ... растягивает дробь на этот диапазон, Math.floor округляет вниз до целого, + min сдвигает к нужному началу.

Для кубика 1..6: Math.floor(Math.random() * 6) + 1.

4

Частая ошибка — взять Math.round вместо Math.floor. С round крайние значения выпадают в два раза реже остальных, и распределение становится неравномерным. Всегда используй Math.floor для генерации случайного целого.

Ваш ответ

Войдите, чтобы ответить на вопрос.