Генератор случайных чисел Javascript в диапазоне, ниже и выше заданного диапазона

Я пытался создать генератор случайных чисел с заданным диапазоном, думал, что это будет легко, а затем без какой-либо логической причины случайное число никоим образом не зависит от заданного максимального и минимального диапазона. Пожалуйста помоги. Вот код:

<!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>
Math.floor(Math.random() * max + min); Это приводит к тому, что Math.random() умножается на max, и после этого min добавляется через плюс.
Tyr 27.04.2018 19:59
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
3
1
2 740
4

Ответы 4

  1. document.getElementById("max").value - это строка, поэтому теперь Math.random() * max + min - это float * string + string, который добавляет минимальное значение в виде строки. parseInt решит эту проблему.
  2. Math.random() * max + min неверен. Math.random() * (max - min + 1) + min прав.

Но в моем браузере 0.01 * "10" + "999" - 0,1999.

set0gut1 27.04.2018 20:28

Да, умножение переводит строку в число, а сложение - нет.

Scott Sauyet 27.04.2018 20:33

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/

Другие вопросы по теме