2015-12-21 33 views
0

數字10205558742352809減少到10205558742352808. 什麼?javascript整數錯誤(數字減1)

+1

你究竟如何使用這個號碼?並注意在JS中,所有數字都是基本上浮動的,並且您的數字超出了2 ** 53範圍,因此可以精確地表示整數。 –

+1

看看[這篇文章](http://stackoverflow.com/questions/307179/what-is-javascripts-highest-integer-value-that-a-number-can-go-to-without-losin) 。它應該解釋一切。問題是你超出了可以安全使用的最大整數值。 – spac3nerd

回答

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之間的邊界。