【问题标题】:Ensuring `random` 3 digit number in Javascript确保 Javascript 中的“随机”3 位数字
【发布时间】:2017-10-10 07:06:33
【问题描述】:

我正在尝试使用以下函数创建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数字?

提前致谢。

【问题讨论】:

  • 您正在生成一个介于 0-999 之间的随机数,然后添加 100 .....
  • 从计算中移除 +100
  • 从 1 到 9 的简单 1 位(第一个):Math.ceil(Math.random()*9) 从 0 到 9 的简单 1 位(其他):Math.floor(Math.random()*10),您可以进行串联
  • 如果你想得到 100 到 999 之间的随机数。你可以使用这个代码 Math.floor(Math.random()*(999-100+1)+100)
  • @subbu1191 - 你能更新你的建议作为答案吗?它工作正常。

标签: javascript


【解决方案1】:

如果您想生成 100 - 999 之间的 3 位随机数,那么您可以尝试以下解决方案

Math.floor(Math.random()*(999-100+1)+100);

【讨论】:

  • 很高兴提到~~Math.floor 的作用相同;) +1
  • 为什么将999-100+1 保留为等式,为什么不直接将其更改为900
  • Math.floor(Math.random()*(end Number - start Number +1) + start Number) - 生成范围内随机数的通用公式。 (end Number - start Number + 1 ) = 可能结果的数量 Math.random() = 0 到 1 。因为在这种情况下我们需要 100 到 999 之间的数字,所以我们要添加起始数字
【解决方案2】:

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

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

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());
.as-console-wrapper { max-height: 100% !important; top: 0; }

【讨论】:

  • 这是迄今为止唯一一个 HASNT 生成 4 位和 2 位数字的数字。这应该是公认的答案:P。有一个upvote小姐。
【解决方案3】:

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

解决方案:

如果您想确保您的 number 始终为 3 位数字 (&gt;=100),您可以这样做:

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

您应该只测试这个number,直到它变成&gt;=100,而不是添加100,因为它可以为您提供带有4 数字的数字。

演示:

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

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

【讨论】:

    【解决方案4】:

    我不得不面对自己几乎相同的问题(生成从“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 不会得到我想要的结果。

    【讨论】:

    • 但“014”、“088” - 无效
    • @user2024080,不是我的情况,因为我需要生成从“000”到“999”范围内的“某物”。没错,0 始终是有效数字。你需要抑制前导零吗?
    【解决方案5】:

    不要加100,否则会溢出。

    【讨论】:

    • 这并没有提供问题的答案。要批评或要求作者澄清,请在他们的帖子下方留下评论。 - From Review
    • @DanielA.White 首先,这对 OP 不起作用,其次,答案太短,因此没有解释标记为低质量帖子。拥有 128K+ 声誉的您应该知道这一点。 :)
    • @ShaktiPhartiyal 没有什么比答案太短了。
    • @DanielA.White 我不想反对你。但是为什么您的答案被标记为低质量帖子以及 length该答案因其长度和内容而被标记为低质量。跨度>
    【解决方案6】:

    您的代码问题

    如果您添加+100。它附加4 数字号码。如果您删除100。其附加在3 数字下方

    这样更好这样使用,parseInt(Math.floor(math.random()*100000).toString().substring(0,3)) 。生成 4 位以上的随机 num,然后用 3digit 剪切字符串。最后转换成整数。在这种方法中,他们防止低于和高于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 );

    【讨论】:

    • 当 Math.random() 返回 0.0001 或更少时不起作用。
    【解决方案7】:

    你是在正确的道路上,但 +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()01 之间返回一个float,所以只需将它乘以999,而不使用+100

    【讨论】:

    • 你的建议也给个位数和两位数..jsfiddle.net/3gwebtrain/mvuLvbn2
    • @user2024080 这是一个单独的问题,如果您愿意,如何填充前导 0 的模式。
    • @user2024080 所以你只希望它高于 100?那么您需要将变量放在发送之外,只需放入 if 语句以检查其是否高于 100
    • 为什么要“乘以 999”? Math.random() 返回一个介于 0(包括)和 1(不包括)之间的随机数。
    【解决方案8】:
    var number = 0;
    var digits = '';
    
    for (i = 0; i < 3; i++) {
        number = Math.floor(Math.random() * 10);
        digits = digits + number.toString();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-22
      • 2014-09-08
      • 2011-06-15
      • 1970-01-01
      • 2014-06-08
      • 1970-01-01
      相关资源
      最近更新 更多