Если вы используете Math.round
, вы получите неравномерное распределение.
Если вы, например, запросите числа от 2 до 4, только случайные числа от 2,0 до 2,5 будут округлены до 2, и только цифры от 3,5 до 4,0 будут округлены до 4, а числа от 2,5 до 3,5 будет округлено до 3. Это означает, что 50% чисел будет 3, тогда как только 25% будет 2, а 25% будет 4.
Вместо этого используйте Math.floor
, чтобы получить равномерное распределение случайных чисел.
Вам не нужно проверять знак start
и end
, выражение end - start + 1
будет размером диапазона со знаком, отличающимся в зависимости от того, с какой стороны start
это.
function randomInRange(start, end) {
if (start > end) start++; else end++;
return Math.floor((start + Math.random() * (end - start)));
}
Демонстрация: jsfiddle.net / guaEp / 1 /
Исправление:
Выражение end - start + 1
не работает, если start
> end
. Выражение end - start
работает, если верхняя граница является исключительной, то есть диапазон от -10 до 11 возвращает числа в диапазоне от -10 до 10. Я добавил код, чтобы функция приняла включающую верхнюю границу и преобразовала ее в исключительную.
Также:
Как указал Дэвин, вы передаете строки функций, которые заставят функцию объединять строки вместо выполнения арифметических операций.
Просто преобразуйте строки в числа, используя функцию parseInt:
val.innerHTML = randomInRange(parseInt($('fnt').value), parseInt($('lint').value));