我需要在 url 中使用 23 位数字。我正在使用 Math.random() 生成数字,但我得到指数形式的结果。
我的代码是
var id = (Math.random()*11111111111111111111111).toFixed(23);
但我得到了结果6.286119436349295e+21
如何将“id”中的随机值存储为整数?
我需要在 url 中使用 23 位数字。我正在使用 Math.random() 生成数字,但我得到指数形式的结果。
我的代码是
var id = (Math.random()*11111111111111111111111).toFixed(23);
但我得到了结果6.286119436349295e+21
如何将“id”中的随机值存储为整数?
JavaScript 可以连续表示 -9007199254740992 和 9007199254740992 之间的整数。它实际上可以表示更大(和更小)的整数,但不是全部!实际上,在 9007199254740992 之后的“下一个”整数是 9007199254740994。它们有一段时间是两个,然后变成 4,然后是 8,等等。正如您所注意到的,当它们变得非常大时,它们会以科学计数法显示。即使 的结果toFixed
也不能保证以仅由数字组成的形式显示。
因此,当您计算 23 位十进制数字范围内的整数时,您将无法使用 JavaScript 的本机Number
类型(IEEE-754 64 位)来表示其中的一堆。
如果您不关心随机数的特定分布,则0..9
可以使用字母表上的随机字符串,也可以将较小的整数粘贴在一起,但是如果您正在寻找特定的分布,那么您应该(如 Ignacio Vasquez 所建议的那样- Abrams)使用支持任意长度精度的库。
JavaScript 数字对此不够精确。您将永远无法获得完整的 23 个随机数字。获得几个较小的数字并将它们作为字符串粘贴在一起会更容易。
将数字分成两部分并将它们组合成一个字符串。
var id1 = Math.floor( Math.random() * 10e10 ); // 11 digits
var id2 = Math.floor( Math.random() * 10e11 ); // 12 digits
var id = id1+''+id2;
你不能;它甚至不适合 64 位整数,更不用说 32 位整数了。使用任意长度的整数库。