0
數字10205558742352809減少到10205558742352808. 什麼?javascript整數錯誤(數字減1)
數字10205558742352809減少到10205558742352808. 什麼?javascript整數錯誤(數字減1)
TL; DR:浮點數可能會扭曲。
長的答案
JavaScript使用64-bit floating point numbers (IEEE-754)。組成浮點數的二進制數由3部分組成:符號位(1位),指數域(11位)和有效位域(52位)。 There are plenty of sources online進一步詳細說明這是如何工作的。
如果我們轉換10205558742352809它是那麼的二進制格式解釋,作爲十六進制可讀性,我們得到:
434220F367C941D4
這是你會得到102 ... 09同樣的事情。相比之下,與102 ... 10:
434220F367C941D5
所以102 ...... 09不直接表示的在IEEE-754和實際上位於102 ... 08和102 ... 10之間的邊界。
你究竟如何使用這個號碼?並注意在JS中,所有數字都是基本上浮動的,並且您的數字超出了2 ** 53範圍,因此可以精確地表示整數。 –
看看[這篇文章](http://stackoverflow.com/questions/307179/what-is-javascripts-highest-integer-value-that-a-number-can-go-to-without-losin) 。它應該解釋一切。問題是你超出了可以安全使用的最大整數值。 – spac3nerd