2016-11-16 54 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中,數字存儲爲雙精度浮點數。大整數超過雙精度範圍,因此它們變得不準確。