我尝试使用Javascript在0000和9999之间生成四位数的密码。我自然会遇到这样的问题,会生成像403这样的数字,因此所有内容都以0为前缀,然后我使用substr
来获取最后四位数字。
出于某种原因,最后一个数字始终为零,我不明白为什么:
function generatePin () {
min = 0,
max = 9999;
return ("0" + Math.floor(Math.random() * (max - min + 1)) + min).substr(-4);
}
运行10次的输出是:
2200
1070
9370
4870
5190
5490
5240
7410
1190
0220
2310
答案 0 :(得分:5)
它以0结尾,因为在你的号码末尾你有+ min
,而min
是0.它正在执行字符串连接,而不是整数加法,所以你在零到头的时候。只需删除该位即可解决问题。
而Buck Doyle(原谅我不知道如何链接到用户这一事实)是非常正确的 - 如果你要将整个事情解析为一个字符串,你就是'我需要一些更多的前导零。即使你随机分配1,前面的三个零也会给你一个四位数的字符串。
答案 1 :(得分:2)
Math.random().toString().substr(2,4)
答案 2 :(得分:1)
你可以使用一对括号来超越它。
function generatePin () {
min = 0,
max = 9999;
return ("0" + (Math.floor(Math.random() * (max - min + 1)) + min)).substr(-4);
}
" + min"导致尾随零附加。