Почему Math.floor необходим для генерации случайного числа между x и y?

1

Зачем вам нужно использовать Math.floor() при попытке создать случайное число между двумя другими номерами в js? Я не могу заставить его работать так: Math.random() * ((yx) +1) + x)

  • 2
    Math.random() * <anything> даст вам случайное число , а не целое число. Если вы хотите целое число, используйте Math.floor
  • 0
    В вашем коде вам нужно floor потому что вы неправильно делаете + 1 для вашей разницы, заставляя его возвращать значения > y . Если вы удалите + 1 , все значения будут >= x && < y
Теги:

2 ответа

1

Согласно документам 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 вызывается так, что нам не нужно беспокоиться обо всех этих десятичных точках и вместо этого давать хорошее округлое целое число.

  • 0
    Что если вы ищете случайное число между 2 числами и хотите получить десятичные числа? Есть ли способ кодировать это с помощью Math.random или вы просто сделали бы функцию с помощью операторов if и возвращали бы только числа в определенном диапазоне? Спасибо за помощь, я довольно новичок в программировании.
  • 0
    @josh scale [0,1) как уже упоминалось: a + (ba) * Math.random () даст вам десятичные дроби между a (включительно) и b (исключительно)
0

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>
  • 0
    Я не упомянул, но мне было интересно, ищите ли вы не-int номера. Скажем, между 5.03 и 8.339342. Я не мог заставить работать код без Math.floor (), который смягчает проблему, которую я пытался решить. Есть ли способ без Math.floor () или Math.ceil ()?
  • 0
    @josh Я добавил пример того, как получить случайное число между двумя числами x и y.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню