确保Javascript中的“随机”3位数字

时间:2017-05-11 10:21:55

标签: javascript

我正在尝试使用以下函数创建3数字随机数:

gridView.generateData = function( size ) {

        var newData = [];

        var size = size || 100;
        var baseSize = 0;

        while( baseSize < size ) {
            baseSize++;
            newData.push( {
                "mk" : Math.floor( Math.random()*999 ) + 100 //3 digit
            } );
        }       
        return $q.all( newData );
    }

但是在输出object中,我看到有多个实例有4个数字。如何使用上述功能仅保证3数字?

提前感谢。

7 个答案:

答案 0 :(得分:1)

您的代码中的问题是您在号码中使用+100,它会为所有生成的大于900的号码提供4位数字:900+100=1000。< / p>

<强>解决方案:

如果您想确保number始终是一个3位数字(>=100),您可以这样做:

var number;
do {
  number = Math.floor(Math.random() * 999);
} while (number < 100);

您应该对此number进行测试,直到>=100,而不是向其添加100,因为它可以为您提供4位数字。

<强>演示:

这是一个现场演示,仅允许100999之间的数字:

&#13;
&#13;
var number;
do {
  number = Math.floor(Math.random() * 999);
} while (number < 100);
console.log(number);
&#13;
&#13;
&#13;

答案 1 :(得分:0)

不要添加100.否则会溢出。

答案 2 :(得分:0)

您走的是正确的道路,但+100没有必要,如下所示:

gridView.generateData = function( size ) {
    var newData = [];

    var size = size || 100;
    var baseSize = 0;
    var digit = ~~( Math.random()*999 );

    while(digit < 100) {
        digit = ~~( Math.random()*999 );
    }

    if(digit >= 100) {
        while( baseSize < size ) {
            baseSize++;
            newData.push( {
                "mk" : digit //3 digits
            });
        }

        return $q.all( newData );
    }
}

由于Math.random()float0之间返回1,因此只需将其999乘以+100

答案 3 :(得分:0)

您的代码问题

如果您添加+100。附加4位数。如果您删除了100。它附加在3位数

之下

更好 像这样使用parseInt(Math.floor(math.random()*100000).toString().substring(0,3))。生成4位以上的随机数,然后用3数字剪切字符串。最后转换为整数。在这种方法中,它们会阻止低于和高于3的数字值。

var newData = [];

        var size =100;
        var baseSize = 0;

        while( baseSize < size ) {
            baseSize++;
            newData.push( {
                "mk" : parseInt(Math.floor( Math.random()*100000).toString().substring(0,3))
            } );
        }       
      console.log( newData );

答案 4 :(得分:0)

您可以为数字使用变量。然后构建数字的10个效力otu并使用该数字作为因子和值来添加以从右侧获得具有切片的数字。

稍后,您可以返回一个带有数值或其他结果格式的obejct。

&#13;
&#13;
function generateData(size) {
    var digits = 3;
    return Array.apply(null, { length: size || 100 }).map(function () {
        return Math.floor(Math.random() * Math.pow(10, digits) + Math.pow(10, digits)).toString().slice(-digits);
    });
}

console.log(generateData());
&#13;
.as-console-wrapper { max-height: 100% !important; top: 0; }
&#13;
&#13;
&#13;

答案 5 :(得分:0)

var number = 0;
var digits = '';

for (i = 0; i < 3; i++) {
    number = Math.floor(Math.random() * 10);
    digits = digits + number.toString();
}

答案 6 :(得分:0)

我不得不面对自己几乎相同的问题(生成从“ 000”到“ 999”的“东西”)并决定使用:

var round = 10;
while( round > 0 ) {
    round--;
    console.log( Math.random().toString().concat("0".repeat(3)).substr(2,3) );
}                

请记住,Math.random()返回一个介于0(含)和1(不含)之间的随机数。您可能会得到“ 0.001”甚至“ 0.0001”(这在小数部分上有很多前导零),因此乘以1000或999不会得到我想要的结果。