我需要在一个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建议的那样)使用支持任意长度精度的库。
var id1 = Math.floor( Math.random() * 10e10 ); // 11 digits
var id2 = Math.floor( Math.random() * 10e11 ); // 12 digits
var id = id1+''+id2;
不行,即使是64位整数也无法容纳,更别说32位整数了。请使用任意长度的整数库。