Почему в данном коде к результату прибавляется единица?
console.log(Math.floor(Math.random() * 100) + 1);
Этот код выведет число от 1 до 100 включительно, или от 2 до 99?
Метод Math.random() возвращает псевдослучайное число с плавающей запятой из диапазона [0, 1), то есть, от 0 (включительно) до 1 (но не включая 1), которое затем можно отмасштабировать до нужного диапазона.
Следовательно при умножении на 100 мы получаем диапазон от 0 до 99, и при инкременте этого диапазона на 1 получим от 1 до 100.
Если вы хотите получить диапазон от 2 до 99, то вам нужны следующие коэффициенты:
Math.floor(Math.random() * 98) + 2
Если вы хотите получить диапазон от 0 до 100, то вам нужен следующий коэффициент:
Math.floor(Math.random() * 101)
Тут есть еще один важный момент- какой метод вы используете для округления:
Math.floor, Math.round или Math.ceil.
В случае с Math.floor- округление вниз. Округляет аргумент до ближайшего меньшего целого.
Math.floor(1.9) = 1
В случае с Math.round возвращает ближайшее целое число.
Math.round(1.5) = 2
Math.round(1.4) = 1
В случае с Math.ceil - округление вверх. Округляет аргумент до ближайшего большего целого.
Math.ceil(1.1) = 2
Следовательно:
Math.floor(Math.random()*100) - диапазон от 0 до 99
Math.round(Math.random()*100) - диапазон от 0 до 100
Math.ceil(Math.random()*100) - диапазон от 1 до 100
Резюмируя: лучше использовать Math.floor или Math.ceil как методы округления, т.к. в случае с Math.round мы получаем неравномерную вероятность выпадения для нижней и верхней границы по 0.4(9) против 0.(9) для всех остальных целых чисел диапазона.
Пример: от 0 до 0.4(9) округляется до 0, от 99.5 до 99.(9) округляется до 100 против скажем от 2.5 до 3.4(9), которое округлится до 2.
Ссылки: 1, 2, 3.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/random
... returns a floating-point, pseudo-random number in the range 0–1 (inclusive of 0, but not 1)
... возвращает псевдо-случайное число с плавающей точкой в диапазоне 0-1 (включая ноль, но не включая один)
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости