3

我需要在 url 中使用 23 位数字。我正在使用 Math.random() 生成数字,但我得到指数形式的结果。

我的代码是

var id = (Math.random()*11111111111111111111111).toFixed(23);

但我得到了结果6.286119436349295e+21

如何将“id”中的随机值存储为整数?

4

4 回答 4

2

JavaScript 可以连续表示 -9007199254740992 和 9007199254740992 之间的整数。它实际上可以表示更大(和更小)的整数,但不是全部!实际上,在 9007199254740992 之后的“下一个”整数是 9007199254740994。它们有一段时间是两个,然后变成 4,然后是 8,等等。正如您所注意到的,当它们变得非常大时,它们会以科学计数法显示。即使 的结果toFixed也不能保证以仅由数字组成的形式显示。

因此,当您计算 23 位十进制数字范围内的整数时,您将无法使用 JavaScript 的本机Number类型(IEEE-754 64 位)来表示其中的一堆。

如果您不关心随机数的特定分布,则0..9可以使用字母表上的随机字符串,也可以将较小的整数粘贴在一起,但是如果您正在寻找特定的分布,那么您应该(如 Ignacio Vasquez 所建议的那样- Abrams)使用支持任意长度精度的库。

于 2012-12-26T08:14:35.087 回答
1

JavaScript 数字对此不够精确。您将永远无法获得完整的 23 个随机数字。获得几个较小的数字并将它们作为字符串粘贴在一起会更容易。

于 2012-12-26T08:02:58.143 回答
0

将数字分成两部分并将它们组合成一个字符串。

var id1 = Math.floor( Math.random() * 10e10 ); // 11 digits
var id2 = Math.floor( Math.random() * 10e11 ); // 12 digits

var id = id1+''+id2;
于 2012-12-26T08:10:53.780 回答
0

你不能;它甚至不适合 64 位整数,更不用说 32 位整数了。使用任意长度的整数库。

于 2012-12-26T08:02:39.417 回答