Случайное целое число Javascript между двумя числами
Я пытаюсь создать генератор случайных чисел, который генерирует случайные числа между двумя числами. Например, скажем, я хочу создать случайное число от 4 до 10, я бы хотел, чтобы он мог выбирать из любого числа от 4 до 10. Вот что я пробовал:
var randNumMin = 4;
var randNumMax = 10;
var randInt = (Math.floor(Math.random() * (randNumMax - randNumMin + 1)) + randNumMin);
Однако, похоже, что это не сработало и пороло странные случайные числа, которые не были между 4 и 10, а некоторые начинались с 0. Что было бы правильным алгоритмом для этого?
Вот код, который я реализую в алгоритме:
$(function() {
$('#generateRandNums').click(function() {
var numCount = document.getElementById("randNumCount").value;
var randNumMin = document.getElementById("randNumMin").value;
var randNumMax = document.getElementById("randNumMax").value;
if (numCount.match(/^[\d]*$/ ) && randNumMin.match(/^[\d]*$/ ) && randNumMax.match(/^[\d]*$/ )) {
if (numCount == "" || randNumMin == "" || randNumMax == "") {
alert ("Please fill out all forms then try again.");
} else {
if (randNumMin>randNumMax) {
alert ("Please make sure your first number is smaller than the second, then try again.");
} else {
if (randNumMin<0) {
alert ("Please make sure that you generate a positive number of random numbers, then try again.");
} else {
if (numCount>1) {
var randResult = ("You generated " + numCount + " random numbers between " + randNumMin + " and " + randNumMax + " and got the numbers ")
oneNumber = 0;
} else {
var randResult = ("You generated a random number between " + randNumMin + " and " + randNumMax + " and got the number ");
oneNumber = 1;
}
for (i=0;i<numCount;i++) {
//Get a random number between randNumMin and randNumMax
var randInt = (Math.floor(Math.random() * (randNumMax - randNumMin + 1)) + randNumMin);
if (i == numCount-1) {
if (oneNumber == 0) {
randResult = (randResult + "and " + randInt + ".");
} else {
randResult = (randResult + randInt + ".");
}
} else {
randResult = (randResult + randInt + ", ");
}
}
$("#randNumResults").val(randResult);
}
}
}
} else {
alert ("Make sure you only enter numbers and no spaces, then try again.");
}
});
});
Я также попытался заменить строку randInt следующим образом:
var randInt = Math.floor((Math.random() * ((randNumMax + 1) - randNumMin)) + randNumMin);
Это все еще не сработало.
Я не уверен, что алгоритм неправильный или я включаю его неправильно в функцию. Ответ приветствуется, спасибо.
Ответы
Ответ 1
Ваша проблема в том, что вы никогда не конвертировали свою строку в числа, попробуйте добавить эту
if ( numCount.match(/^[\d]*$/ ) &&
randNumMin.match(/^[\d]*$/ ) &&
randNumMax.match(/^[\d]*$/ )){
if (numCount === "" || randNumMin === "" || randNumMax === "") {
alert ("Please fill out all forms then try again.");
} else {
numCount=numCount-0;randNumMin=randNumMin-0;randNumMax=randNumMax-0;
Еще одно примечание, которое вам нужно изменить, проверяя, является ли значение пустой строкой для строгого равенства. Чтобы увидеть, что я имею в виду, попробуйте использовать ноль для одного из значений. 0 == ""//returns true
, потому что оба являются ложными 0 === ""//returns false
.
Ответ 2
Генерация случайных целых чисел в JavaScript в определенном диапазоне?
/**
* Returns a random number between min and max
*/
function getRandomArbitary (min, max) {
return Math.random() * (max - min) + min;
}
/**
* Returns a random integer between min and max
* Using Math.round() will give you a non-uniform distribution!
*/
function getRandomInt (min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
http://roshanbh.com.np/2008/09/get-random-number-range-two-numbers-javascript.html
//function to get random number upto m
function randomXToY(minVal,maxVal,floatVal)
{
var randVal = minVal+(Math.random()*(maxVal-minVal));
return typeof floatVal=='undefined'?Math.round(randVal):randVal.toFixed(floatVal);
}
или
Генерировать случайное число между двумя номерами в JavaScript
Ответ 3
Underscore.js имеет приятную утилиту для этого _.random(min, max)
Ответ 4
Как насчет этого?
var max = 10;
var min = 4;
var random = Math.floor((Math.random() * ((max + 1) - min)) + min);