Я пытался создать генератор случайных чисел с заданным диапазоном, думал, что это будет легко, а затем без какой-либо логической причины случайное число никоим образом не зависит от заданного максимального и минимального диапазона. Пожалуйста помоги. Вот код:
<!DOCTYPE html>
<html>
<head>
<style>
.elements {
text-align: center;
}
.random {
margin-top: 100px;
width: 275px;
height: 200px;
font-size: 50px;
text-align: center;
}
.range {
margin: 35px 25px;
width: 100px;
height: 100px;
text-align: center;
font-size: 30px;
}
.generate {
margin-top: 50px;
width: 250px;
height: 35px;
font-size: 20px;
}
</style>
<script language = "javascript" type = "text/javascript">
function rand()
{
var max = document.getElementById("max").value;
var min = document.getElementById("min").value;
var output = document.getElementById("output");
var random = Math.floor(Math.random() * max + min);
output.value = random;
}
</script>
</head>
<body>
<div class = "elements">
<input type = "text" class = "random" id = "output">
<br>
<input type = "button" class = "generate" value = "Generate random number" onclick = "rand();">
<br>
<h1>Maximum Number</h1>
<input type = "text" class = "range" id = "max">
<h1>Minimal Number</h1>
<input type = "text" class = "range" id = "min">
</div>
</body>
</html>



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


document.getElementById("max").value - это строка, поэтому теперь Math.random() * max + min - это float * string + string, который добавляет минимальное значение в виде строки. parseInt решит эту проблему.Math.random() * max + min неверен. Math.random() * (max - min + 1) + min прав.Но в моем браузере 0.01 * "10" + "999" - 0,1999.
Да, умножение переводит строку в число, а сложение - нет.
Math.random() нужно умножать на длина вашего диапазона, а не на максимальное значение в диапазоне.
const getRandom = (min, max) => Math.floor(Math.random() * (max - min + 1) + min);
Array.from({ length: 20 }, () => console.info(getRandom(0, 2)));Добавьте блок кода, который проверяет, попадает ли сгенерированное случайное число в указанный диапазон. Если он не выполняет циклическую генерацию случайных чисел до тех пор, пока проверка условия не завершится неудачно;
function rand() {
var max = document.getElementById("max").value;
var min = document.getElementById("min").value;
var output = document.getElementById("output");
var random = Math.floor(Math.random() * max + min);
while (random > max || random < min) {
random = Math.floor(Math.random() * max + min);
}
output.value = random;
}.elements {
text-align: center;
}
.random {
margin-top: 100px;
width: 275px;
height: 200px;
font-size: 50px;
text-align: center;
}
.range {
margin: 35px 25px;
width: 100px;
height: 100px;
text-align: center;
font-size: 30px;
}
.generate {
margin-top: 50px;
width: 250px;
height: 35px;
font-size: 20px;
}<script src = "https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class = "elements">
<input type = "text" class = "random" id = "output">
<br>
<input type = "button" class = "generate" value = "Generate random number" onclick = "rand();">
<br>
<h1>Maximum Number</h1>
<input type = "text" class = "range" id = "max">
<h1>Minimal Number</h1>
<input type = "text" class = "range" id = "min">после этого вы можете назначить его значение для вывода.
используя этот код:
// the initial seed
Math.seed = 6;
// in order to work 'Math.seed' must NOT be undefined,
// so in any case, you HAVE to provide a Math.seed
Math.seededRandom = function(max, min) {
max = max || 1;
min = min || 0;
Math.seed = (Math.seed * 9301 + 49297) % 233280;
return Math.floor(min + (Math.seed / 233280) * (max - min));
}
var res = Math.seededRandom(100,-100)
console.info(res)
или попробуйте сами
http://indiegamr.com/generate-repeatable-random-numbers-in-js/
Math.floor(Math.random() * max + min);Это приводит к тому, чтоMath.random()умножается наmax, и после этогоminдобавляется через плюс.