【问题标题】:JS - How can I generate a long random number?JS - 如何生成一个长随机数?
【发布时间】:2019-06-22 00:16:13
【问题描述】:

我知道我需要使用 Math.random() 来制作随机数,但今天我尝试制作一个介于 1 和 9999 之间的随机数......(9 重复 19 次)并且我的输出总是以 3- 结尾5个零。如何生成更详细的随机数?

我做了什么:

const foo = Math.floor(Math.random() * parseInt("9".repeat(19)));

另外,我很确定我知道如何做到这一点,但如果有人能告诉我,我如何填充零以达到某个数字计数? (例如,pad(15,4) 变为 0015,因为您需要多 2 位数字才能使其长 4 位数字)

【问题讨论】:

  • 在不损失精度的情况下可以表示的最大整数是2^53 - 1,它有 16 位数字。换句话说,您不能在不丢失精度的情况下从 19 位长字符串派生整数值。证明:9007199254740991 + 1 9007199254740991 + 2 都是 9007199254740992。欢迎来到浮点值的世界。
  • 所以,你可能想要的是Math.floor(Math.random() * Number.MAX_SAFE_INTEGER);

标签: javascript random digits zero-padding


【解决方案1】:

最好的办法可能是只使用一串随机整数(也解决填充问题):

let foo = '';
for(i=0; i<19; ++i) foo += Math.floor(Math.random() * 10);
alert(foo);

【讨论】:

    【解决方案2】:

    您需要使用编码为字符串的数字。像这样的循环:

    var desiredMaxLength = 19
    var randomNumber = '';
    for (var i = 0; i < desiredMaxLength; i++) {
        randomNumber += Math.floor(Math.random() * 10);
    }
    

    表示为字符串的数字的算法可以通过https://github.com/rauschma/strint 上的strint 库下载。

    【讨论】:

      【解决方案3】:

      您遇到了 Number.MAX_SAFE_INTEGER。最大的精确整数值为 2^53-1,即 9007199254740991。

      【讨论】:

        猜你喜欢
        • 2023-01-03
        • 2018-04-21
        • 1970-01-01
        • 2014-03-16
        • 1970-01-01
        • 2011-09-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多