固定长度的随机数

5

我想生成一个长度为5的0-9数字随机整数。我尝试过以下代码:

function genRand(min,max) {
    for (var i = 1; i <= 5; i++) {
        var range = max - min + 1;
        return Math.floor(Math.random()*range) + min;
    }
}

并调用:

genRand(0,9);

但它总是只返回一个数字,而不是5个(
请帮忙!

1
所以,你想要一个随机的5位整数是你的意思吗?这不太清楚。 - Nate B
生成 5 个随机的单个数字,范围从 0 到 9,并将它们粘贴。 - skywind
"粘贴"? 你能否包含一些你想让函数返回的期望结果?字符串 "07198" 或数组(对象)[0,7,1,9,8]? - Stefan
5个回答

15
   function genRand() {
      return Math.floor(Math.random()*89999+10000);
   }

你为什么使用 89999? - Oscar López
2
Math.random返回0(包括)到1(不包括)之间的随机数。因此,您可以改为执行Math.floor(Math.random() * 90000) + 10000,这样就保证不会生成90000。 - k2snowman69
@OscarLópez 89999 来自于最大的五位数可能存在的数字(99999)减去最小的五位数可能存在的数字(10000)。 - k2snowman69

9

return语句会在第一次循环时退出函数。


2

最小的五位数是10000,最大的是99999,也就是10000+89999。

返回0到89999之间的随机数,并加上最小值。

var ran5=10000+Math.round(Math.floor()*90000)

Math.floor向下取整,而Math.random的值大于等于0且小于1。


2
这是Nate B答案的更广义版本:
function rand(digits) {
    return Math.floor(Math.random()*parseInt('8' + '9'.repeat(digits-1))+parseInt('1' + '0'.repeat(digits-1)));
}

1

要生成5位随机数,请在范围(10000, 99999)内生成随机数。 或者生成5个单个数字并将它们粘贴。

编辑

你所展示的过程只会生成一个数字并返回给调用者。 可能有效的方法是(伪代码):

int sum = 0;
int m = 1;
for (i=0;i<5;i++)
{
  sum = sum  + m * random (0, 9);
  /*       or                  */
  sum = sum * m + random (0, 9);
  m = m * 10;
}

或者更好的方法是使用rand(10000, 99999)生成5位随机数。


生成 5 个从 0 到 9 的随机单个数字并粘贴它们。是的! - skywind
1
难道不是更好的方法是在范围(10000,99999)内生成随机数吗?为了粘贴5个随机生成的数字(0到9),您需要执行5次乘法和5次加法。 - phoxis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接