有没有办法用JavaScript生成指定范围内的随机数?
例如:指定范围从1到6,随机数可以是1、2、3、4、5或6。
有没有办法用JavaScript生成指定范围内的随机数?
例如:指定范围从1到6,随机数可以是1、2、3、4、5或6。
当前回答
或者,在Undercore
_.random(min, max)
其他回答
如果起始数字是1,如示例(1-6)所示,则可以使用Math.ceil()方法代替Math.floor()。
Math.ceil(Math.random() * 6)
而不是
Math.floor(Math.random() * 6) + 1
我们不要忘记其他有用的数学方法。
这应该是有效的:
const getRandomNum = (min, max) => Math.floor(Math.random() * (max - min + 1)) + min
范围[a,b]内的加密强随机整数(假设:a<b)
let rand=(a,b)=>a+(b-a+1)*crypto.getRandomValues(新Uint32Array(1))[0]/2**32|0console.log(兰特(1,6));
排名靠前的解决方案在数学上与它下面的注释不同->Math.floor(Math.random()*6)+1。
任务:生成1到6之间的随机数。
Math.random()返回0到1之间的浮点数(例如0.344717274374或0.99341293123),我们将使用它作为百分比,因此Math.floor(Math.random*()*6)+1返回6的某个百分比(max:5,min:0)并加1。作者很幸运,下限是1.,因为百分比下限将“最大限度”返回小于6乘以1的5,并且1将被下限1加上。
当下限大于1时,就会出现问题。例如,任务:生成2到6之间的随机数。
(遵循作者的逻辑)Math.floor(Math.random()*6)+2,很明显,如果我们在这里得到5->Math.random()*66,然后加上2,结果将是7,超出了6的期望边界。
另一个例子,任务:在10到12之间随机生成。
(遵循作者的逻辑)Math.floor(Math.random()*12)+10,(抱歉重复)很明显,我们得到了数字“12”的0%-99%,这将远远超出12的期望边界。
因此,正确的逻辑是取下限和上限之间的差值加1,然后将其下限(减去1,因为Math.random()返回0-0.99,因此无法获得完全上限,这就是为什么我们将1添加到上限以获得最大99%的(上限+1),然后将它下限以消除多余)。一旦我们得到了(差值+1)的地板百分比,我们就可以添加下边界,以获得2个数字之间所需的随机数。
逻辑公式为:Math.floor(Math.random()*((up_boundary-low_boundary)+1))+10。
备注:即使是最高分答案下的评论也是不正确的,因为人们忘记了在差异上加1,这意味着他们永远不会得到上限(是的,如果他们根本不想得到,这可能是一种情况,但要求包括上限)。
获取0到400之间的随机整数
let rand=数学舍入(Math.random()*400)document.write(兰特)
获取200到1500之间的随机整数
让范围={min:200,max:1500}设delta=范围.max-范围.minconst rand=数学舍入(range.min+Math.random()*delta)document.write(兰特)
使用函数
函数randBetween(最小值,最大值){设delta=最大值-最小值return Math.round(min+Math.random()*delta)}document.write(randBetween(10,15));
//JavaScript ES6箭头函数常量randBetween=(最小值,最大值)=>{设delta=最大值-最小值return Math.round(min+Math.random()*delta)}document.write(randBetween(10,20))