js缺少整数

时间:2012-05-25 14:53:47

标签: javascript numbers

Javascript无法使用10100401822940525,它就像Windows中的'conn'文件夹一样。为什么js会因这个号码而失败?

您可以查看示例,

http://jsfiddle.net/ymutlu/yCpWh/1/

3 个答案:

答案 0 :(得分:4)

在IEEE浮点类型数字中,数字越大,数字之间的差距越大。当你看看number is stored

时,它是有道理的

考虑有相同数量的可能值,负指数为非负数。这意味着在0和1之间存在相同数量的可能数字,因为在1和无穷大之间。显然,1和无穷大之间的数字进一步间隔开来。这个间距实际上是分布的,所以距离0越远,可能存储的数字之间的差距越大(没有真正的最大数字,最终你会达到无数字与Infinity无法区分的程度)。

这实际上非常有效,因为在大多数情况下,处理较大数字时需要较少的精度。 1010040182294052410100401822940526之间的差异远小于13之间相对于数字大小的差异。能够表示数字2而不是数字10100401822940525更为重要,并且限制为64位。

答案 1 :(得分:1)

我发现了这个: http://gskinner.com/blog/archives/2011/03/the-case-of-the-disappearing-number.html

不知道他是对的,但这听起来很合理。 ;)

答案 2 :(得分:1)

这是浮点舍入的一个实例。 Javascript中的数字作为双精度浮点数存储(AFAIK)。浮点数的精度有限,因此当数字太大时,它们不能再存储为精确整数,而且需要舍入。

这是另一个例子,错误更大。 http://jsfiddle.net/NhZ75/

如果您想知道数学运算的原因,那是因为大多数计算机都以高于存储它的精度进行浮点数学运算,因此舍入误差通常仅在将数字存储在变量中时才会发生。

相关问题