2016-11-16 62 views
0

我有一个数字n这是16位数字(1111111111111111)。当我添加另一个1到这个数字(使它11111111111111111,17位数字长)它显示为11111111111111112JavaScript的最大数量大小与尾随零不相同

这是可以理解的,因为它比Number.MAX_SAFE_INTEGER大,但是如果我添加了一个0代替(使它11111111111111110,仍有17位长),显示正确数量为11111111111111110

let a = 11111111111111111; 
let b = 11111111111111110; 

console.log(a, b); // 11111111111111112 11111111111111110 

行为上面任何最终位发生时,除了0。这种行为差异的原因是什么?


我已经看过"Large numbers erroneously rounded in Javascript",但这并不能解释为什么在添加一个非零数字是它是圆的,而不是在添加一个零。

+0

看起来像一个整数舍入问题在javascript – mtizziani

+0

Downvoter:为什么downvote?这是一个很好解释的问题,我找不到重复的问题。 –

+1

可能重复的[大量错误地在Javascript中舍入](http://stackoverflow.com/questions/1379934/large-numbers-erroneously-rounded-in-javascript) – Xufox

回答

0

这是因为在Javascript中,数字存储为双精度浮点数。大整数超过双精度范围,因此它们变得不准确。