我正在尝试使用以下函数创建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 :(得分: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
位数字。
<强>演示:强>
这是一个现场演示,仅允许100
和999
之间的数字:
var number;
do {
number = Math.floor(Math.random() * 999);
} while (number < 100);
console.log(number);
&#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()
在float
和0
之间返回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。
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;
答案 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不会得到我想要的结果。