如何在2个值之间生成随机数?

时间:2014-07-16 19:42:28

标签: javascript random

我正在尝试创建将在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的新手

2 个答案:

答案 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);