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

在javascript中将指数数转换为整数,javascript,math,random,Javascript,Math,Random,我需要在url中使用23位数字。我使用Math.random()生成数字,但得到的结果是指数形式的 我的代码是 var id = (Math.random()*11111111111111111111111).toFixed(23); 但我得到的结果是6.286119436349295e+21 如何将“id”中的随机值存储为整数?您不能;它甚至不适合64位整数,更不用说32位整数了。使用任意长度的整数库。JavaScript数字不够精确。您将永远无法获得完整的23个随机数字。得到几个较小的数字

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

我的代码是

var id = (Math.random()*11111111111111111111111).toFixed(23);
但我得到的结果是
6.286119436349295e+21


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

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

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

将数字分成两部分,并将它们组合成字符串

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

var id = id1+''+id2;

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

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


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

“数字”,我想是十进制数字吧?