Почему в данном коде к результату прибавляется единица?
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 (включая ноль, но не включая один)
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab