在javascript中将指数数转换为整数

时间:2012-12-26 08:00:10

标签: javascript math random

我需要在网址中使用23位数字。我使用Math.random()生成数字但是我以指数形式得到结果。

我的代码是

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

但我的结果为6.286119436349295e+21

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

4 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

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

var id = id1+''+id2;