Зачем вам нужно использовать Math.floor() при попытке создать случайное число между двумя другими номерами в js? Я не могу заставить его работать так: Math.random() * ((yx) +1) + x)
Согласно документам MDN,
Функция Math.random() возвращает псевдослучайное число с плавающей запятой в диапазоне 0-1 (включая 0, но не 1).
Это означает, что число, в которое вы будете возвращены, находится между 0 и 1. Теперь, имея длинную кучу десятичных точек, мы не очень удобны для разработчиков, поэтому мы хотели бы умножить его на определенное значение, добавить один (поскольку случайный функция возвращает число от 0 до 1, но исключает 1), и округляет число, чтобы получить целое число, которое легко читать и работать.
Например:
var x = Math.floor((Math.random() * 10) + 1);
Это принимает число, сгенерированное "Math.random()", скажем, что это значение равно 0.12345, а затем умножает его на 10, что дает результат 1.2345. Затем мы добавляем 1, чтобы иметь значение 2.2345. Теперь все эти десятичные точки нам не очень полезны, так как мы хотим иметь хороший круглый номер, поэтому мы вызываем метод Math.floor(), который округляет значение до значения 2.
Опять же, метод Math.floor вызывается так, что нам не нужно беспокоиться обо всех этих десятичных точках и вместо этого давать хорошее округлое целое число.
Math.random()
будет генерировать случайное число между 0 (включительно) и 1 (исключение). Это обычно означает, что число с большим количеством десятичных знаков, что не очень удобно. Чтобы преобразовать его в Integer, вам нужно будет использовать Math.floor()
(преобразует число до ближайшего Integer меньше, чем оно) или Math.ceil()
(преобразует число в ближайший целое больше, чем он).
console.log(Math.random());
var x = 10;
var y = 5;
var random;
console.log((random = Math.random() * (y-x)+1 + x));
console.log("Nearest Integer less than random: "+Math.floor(random));
Чтобы получить случайное целое число между x (включительно) и y (исключение):
function getRndInteger(min, max) {
return Math.floor(Math.random() * (max - min)) + min;
}
Чтобы получить случайное число между x и y (не обязательно целое число), просто удалите Math.floor()
:
function getRndInteger(min, max) {
return (Math.random() * (max - min)) + min;
}
Демо-версия:
Min:
<input type="number" id="min">
<br/>
Max:
<input type="number" id="max"/><br/>
<button onClick="generateRandom()">
Generate Random Number
</button>
<p/>
<span id="result"></span>
<script>
function getRndInteger(min, max) {
return (Math.random() * (max - min)) + min;
}
function generateRandom(){
var min = parseFloat(document.getElementById('min').value);
var max = parseFloat(document.getElementById('max').value);
if(!isNaN(min)&&!isNaN(max)&&min<max){
document.getElementById('result').textContent = 'Random Number: '+getRndInteger(min, max);
} else {
document.getElementById('result').innerHTML = '<b>Please enter valid min and max values.</b>';
}
}
</script>
Math.random() * <anything>
даст вам случайное число , а не целое число. Если вы хотите целое число, используйтеMath.floor
floor
потому что вы неправильно делаете+ 1
для вашей разницы, заставляя его возвращать значения> y
. Если вы удалите+ 1
, все значения будут>= x && < y