JavaScript,生成长度为9个数字的随机数

时间:2010-08-09 03:19:54

标签: javascript

我正在寻找一种高效,优雅的方式来生成长度为9位的JavaScript变量:

示例:323760488

16 个答案:

答案 0 :(得分:54)

为什么不从Math.random()字符串表示中提取数字?

Math.random().toString().slice(2,11);
/*
Math.random()                         ->  0.12345678901234
             .toString()              -> "0.12345678901234"
                        .slice(2,11)  ->   "123456789"
 */

(要求是每个javascript实现Math.random()的精度至少为9位小数)

答案 1 :(得分:47)

您可以生成9个随机数字并将它们连接在一起。

或者,您可以调用random()并将结果乘以1000000000:

Math.floor(Math.random() * 1000000000);

由于Math.random()生成一个介于0和1之间的随机双精度数,因此您将拥有足够的精度数位,以便在最不重要的位置保持随机性。

如果您想确保您的号码以非零数字开头,请尝试:

Math.floor(100000000 + Math.random() * 900000000);

或用零填充:

function LeftPadWithZeros(number, length)
{
    var str = '' + number;
    while (str.length < length) {
        str = '0' + str;
    }

    return str;
}

或使用 inline 'trick' 填充。

答案 2 :(得分:19)

也...

function getRandom(length) {

return Math.floor(Math.pow(10, length-1) + Math.random() * 9 * Math.pow(10, length-1));

}

getRandom(9)=&gt; 234664534

答案 3 :(得分:8)

我发现效率的三种方法: (运行Firefox 7.0 Win XP的测试机)

parseInt(Math.random()*1000000000, 10)

100万次迭代:~626ms。到目前为止最快 - parseInt是一个本机函数vs再次调用Math库。注意:见下文。

Math.floor(Math.random()*1000000000)

100万次迭代:~1005ms。两个函数调用。

String(Math.random()).substring(2,11)

100万次迭代:~2997ms。三个函数调用。

还有......

parseInt(Math.random()*1000000000)

100万次迭代:~362ms。 注意:parseInt通常被认为是不安全的,没有radix参数。请参阅https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/parseInt或谷歌“JavaScript:好的部分”。但是,传递给parseInt的参数似乎永远不会以'0'或'0x'开头,因为输入首先乘以1000000000.YMMV。

答案 4 :(得分:5)

在一行(ish)中:

var len = 10;
parseInt((Math.random() * 9 + 1) * Math.pow(10,len-1), 10);

<强>步骤:

  • 我们生成一个符合1 ≤ x < 10的随机数。
  • 然后,我们乘以Math.pow(10,len-1)(长度为len的数字)。
  • 最后,parseInt()删除小数。

答案 5 :(得分:2)

屏幕抓取此页:

答案 6 :(得分:2)

以为我会抓住你的问题。当我运行以下代码时,它对我有用。

GET /companies

答案 7 :(得分:2)

Math.random().toFixed(length).split('.')[1]

使用“固定”可让您将长度设置为比默认值长(似乎会在小数点后生成15-16位数字。“固定”将使您需要的位数更多。

答案 8 :(得分:1)

function rand(len){var x='';
 for(var i=0;i<len;i++){x+=Math.floor(Math.random() * 10);}
 return x;
}

rand(9);

答案 9 :(得分:0)

Math.floor(Math.random()* 899999999 + 100000000);

答案 10 :(得分:0)

如果您要生成随机电话号码,则通常禁止从零开始。 这就是你应该结合几种方法的原因:

Math.floor(Math.random()*8+1)+Math.random().toString().slice(2,10);

这将产生100 000 000至999 999 999之间的随机

使用其他方法我有点麻烦来获得可靠的结果,因为领先的零点在某种程度上是一个问题。

答案 11 :(得分:0)

我知道答案很旧,但是我想分享这种方式来生成整数或从0到n的浮点数。请注意,点的位置(浮动情况)在边界之间是随机的。该数字是一个字符串,因为MAX_SAFE_INTEGER的限制现在为9007199254740991

Math.hRandom = function(positions, float = false) {

  var number = "";
  var point = -1;

  if (float) point = Math.floor(Math.random() * positions) + 1;

  for (let i = 0; i < positions; i++) {
    if (i == point) number += ".";
    number += Math.floor(Math.random() * 10);
  }

  return number;

}
//integer random number 9 numbers 
console.log(Math.hRandom(9));

//float random number from 0 to 9e1000 with 1000 numbers.
console.log(Math.hRandom(1000, true));

答案 12 :(得分:0)

function randomCod(){

    let code = "";
    let chars = 'abcdefghijlmnopqrstuvxwz'; 
    let numbers = '0123456789';
    let specialCaracter = '/{}$%&@*/()!-=?<>';
    for(let i = 4; i > 1; i--){

        let random = Math.floor(Math.random() * 99999).toString();
        code += specialCaracter[random.substring(i, i-1)] + ((parseInt(random.substring(i, i-1)) % 2 == 0) ? (chars[random.substring(i, i-1)].toUpperCase()) : (chars[random.substring(i, i+1)])) + (numbers[random.substring(i, i-1)]);
    }

    code = (code.indexOf("undefined") > -1 || code.indexOf("NaN") > -1) ? randomCod() : code;


    return code;
}

答案 13 :(得分:0)

这已经有足够的答案了吗?
我猜不是。因此,即使Math.random()决定返回类似0.000235436的数字,这也应该可靠地提供9位数字:

Math.floor((Math.random() + Math.floor(Math.random()*9)+1) * Math.pow(10, 8))

答案 14 :(得分:0)

  1. max独占:Math.floor(Math.random() * max);

  2. 包含maxMath.round(Math.random() * max);

答案 15 :(得分:0)

为了生成长度为 n 的数字字符串,感谢@nvitaterna,我想出了这个:

1 + Math.floor(Math.random() * 9) + Math.random().toFixed(n - 1).split('.')[1]

它防止第一个数字为零。 每次调用它可以生成长度~50的字符串。