2016-07-14 62 views
0

所以我就遇到了這個問題與JavaScript Number()函數,它似乎返回錯誤值: 以下代碼: 號(「10153396863200835」)
回報10153396863200836,沒有10153396863200835爲什麼javascript數字函數爲這個數字返回錯誤的值?

,但如果我這樣做數量(「10153396863200836」)它返回10153396863200836 和數字(「10153396863200834」)返回10153396863200834

所以我很困惑發生了什麼事?謝謝

回答

4

因爲JavaScript的數字是IEEE-754雙精度二進制浮點數(通常稱爲「double」)。他們只有15位數的小數精度。你的號碼,10153396863200835,比這大得多。

在雙打中,我們不能代表下一個整數之前的最大整數是9,007,199,254,740,992 。 9,007,199,254,740,993不能用雙打代表; 9,007,199,254,740,994即可。這是因爲在這個尺度下,最不重要的位值2位十進制。你去進一步,更大的這些差距獲得,作爲最低顯著位開始是值得的4個十進制,然後8,然後...


現代JavaScript有該值的方便常這個值之前的權利, 9,007,199,254,740,991:Number.MAX_SAFE_INTEGER。它被定義爲double中的最後一個整數,加1給出下一個連續整數。這個名字是略微有誤導性,因爲9,007,199,254,740,994或者確實10,153,396,863,200,836不會突然停止擁有這些值,這只是與他們的數學開始變得......有趣。

+0

好的謝謝,這解釋得很好。 – rainman333

相關問題