【问题标题】:Generating a random four digit pin, last digit is always zero生成一个随机的四位数字引脚,最后一位数字始终为零
【发布时间】:2014-05-13 04:11:20
【问题描述】:

我正在尝试使用 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

【问题讨论】:

    标签: javascript random


    【解决方案1】:

    你可以使用一对括号来超越这个。

    function generatePin () {
        min = 0,
        max = 9999;
        return ("0" + (Math.floor(Math.random() * (max - min + 1)) + min)).substr(-4);
    }
    

    " + min " 导致尾随零追加。

    【讨论】:

      【解决方案2】:
      Math.random().toString().substr(2,4)
      

      【讨论】:

        【解决方案3】:

        它以 0 结尾,因为在您的号码末尾有 + min,而 min 是 0。它执行的是字符串连接,而不是整数加法,因此您将在末尾添加一个零。只需删除该位即可解决问题。

        Buck Doyle(请原谅我不知道如何链接到用户的事实)是完全正确的——如果您要将整个内容解析为字符串,则需要更多前导零.前面三个零会给你一个四位数的字符串,即使你随机选择了一个 1。

        【讨论】:

        • 这就是为什么在使用 PHP 和 Javascript 之类的语言时必须小心,其中任何内容都可以是字符串,也可以不是字符串,具体取决于上下文。就个人而言,我讨厌自动字符串转换。
        • 另外,您应该在字符串中添加"000",因为随机数可能是一位数。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-10-23
        • 1970-01-01
        • 1970-01-01
        • 2011-08-09
        • 2020-11-19
        • 2011-06-26
        相关资源
        最近更新 更多