为什么需要Math.floor生成x和y之间的随机数?

时间:2018-07-30 22:19:16

标签: javascript

为什么要在js中的其他2个数字之间生成随机数,为什么需要使用Math.floor()?我似乎无法让它像这样工作:Math.random()*((y-x)+1)+ x)

2 个答案:

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