我正在尝试创建将在2个值之间生成随机数的JS脚本。但它不起作用,我无法弄清楚为什么。
<form id="form" action="" method="get">
From: <input type="text" name="from" id="from"><br>
To: <input type="text" name="to" id="to"><br><br>
<button onclick="random_gen()">Generate</button>
</form>
<script>
function random_gen() {
var a = document.getElementById("from").value;
var b = document.getElementById("to").value;
var c = Math.floor((Math.random() * b) + a);
document.getElementById("final").innerHTML = c;
return false;
}
</script>
<p id="final"></p>
PS我是JS的新手
答案 0 :(得分:3)
编辑以反映来自@blex的评论,这是正确的
随机的正确算法是:
function rand(a,b){
return Math.floor(Math.random()*(b-a)+a);
}
从输入中检索值时,必须执行parseInt:
var a = parseInt(document.getElementById("from").value);
var b = parseInt(document.getElementById("to").value);
当然,在使用它们之前,您应该检查这些值以确保它们是整数。
答案 1 :(得分:0)
您元素的值将是字符串。您最终会收到一个奇怪的数字,因为您正在使用Math.random() * b
生成随机数,将b
转换为数字,然后连接 a
中包含的字符串。
让我们假设以下内容:
var a = '10';
var b = '20';
所以,Math.random() * b
工作正常。它为您提供了15.12345
之类的值。问题是,您将字符串 "10"
连接到结果,为您提供字符串,15.1234510
,并将其传递给Math.floor
,并转换回15
。
您需要将两个输入转换为数字,然后才能通过rand
进程。请使用parseInt
:
var a = parseInt(document.getElementById("from").value, 10);
var b = parseInt(document.getElementById("to").value, 10);