在JavaScript中将指数数字转换为整数

3

我需要在一个URL中使用23位数字。我使用Math.random()生成数字,但结果是指数形式。

我的代码是:

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

但我得到的结果是6.286119436349295e+21

如何将随机值存储在"id"中作为整数?


“digit”,那是十进制数字,我猜测是吗? - xtofl
4个回答

2

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

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

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


1
JavaScript的数字不够精确。你永远无法获得完整的23个随机数字。最好获取几个较小的数字,然后将它们拼接成一个字符串。

0
将数字分为两部分,并将它们组合成一个字符串。
var id1 = Math.floor( Math.random() * 10e10 ); // 11 digits
var id2 = Math.floor( Math.random() * 10e11 ); // 12 digits

var id = id1+''+id2;

0

不行,即使是64位整数也无法容纳,更别说32位整数了。请使用任意长度的整数库。


你推荐哪一个? - loekTheDreamer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接