为什么要在js中的其他2个数字之间生成随机数,为什么需要使用Math.floor()?我似乎无法让它像这样工作:Math.random()*((y-x)+1)+ x)
答案 0 :(得分:1)
根据MDN文档
Math.random()函数返回浮点伪随机数 数字,范围为0-1(包括0,但不包括1)。
这意味着您将返回的数字在0到1之间。现在,一长串的小数点对我们的开发人员来说不是超级用户友好的,因此我们希望将其乘以某个值,然后加一个(因为随机函数返回的数字介于0和1之间,但不包含 1),然后对数字进行四舍五入以获得易于阅读和使用的整数。
例如:
var x = Math.floor((Math.random() * 10) + 1);
这将使用“ Math.random()”生成的数字,假设该值为0.12345,然后将其乘以10,得出的结果为1.2345。然后,我们加1为2.2345。现在,所有这些小数点对我们来说都没有太大用处,因为我们需要一个不错的整数。因此,我们调用Math.floor()方法将值四舍五入为2。
同样,调用了Math.floor方法,因此我们不必担心所有这些小数点,而只需给一个漂亮的舍入整数即可。
答案 1 :(得分:0)
Math.random()
将生成一个介于0(含)和1(不含)之间的随机数。这通常意味着该数字具有很多小数位,这不是很友好。要将其转换为整数,您将需要使用Math.floor()
(将数字转换为小于它的最接近的整数)或Math.ceil()
(将数字转换为大于它的最接近的整数)。
console.log(Math.random());
var x = 10;
var y = 5;
var random;
console.log((random = Math.random() * (y-x)+1 + x));
console.log("Nearest Integer less than random: "+Math.floor(random));
要获取x(含)和y(不含)之间的随机整数:
function getRndInteger(min, max) {
return Math.floor(Math.random() * (max - min)) + min;
}
要获取x和y之间的随机数(不一定是整数),只需删除Math.floor()
:
function getRndInteger(min, max) {
return (Math.random() * (max - min)) + min;
}
演示:
Min:
<input type="number" id="min">
<br/>
Max:
<input type="number" id="max"/><br/>
<button onClick="generateRandom()">
Generate Random Number
</button>
<p/>
<span id="result"></span>
<script>
function getRndInteger(min, max) {
return (Math.random() * (max - min)) + min;
}
function generateRandom(){
var min = parseFloat(document.getElementById('min').value);
var max = parseFloat(document.getElementById('max').value);
if(!isNaN(min)&&!isNaN(max)&&min<max){
document.getElementById('result').textContent = 'Random Number: '+getRndInteger(min, max);
} else {
document.getElementById('result').innerHTML = '<b>Please enter valid min and max values.</b>';
}
}
</script>