2012-02-21 44 views
2

我以前遇到過這個問題,但是帶有浮點數。類似於this other post。但現在是正常的數字。數字正在更改值

我試圖做到這一點:

var 
    str = 'asdf_10150663120210603', 
    num = +str.split('_')[1]; 

console.log(num); 
// 10150663120210603 expected 
// 10150663120210604 actually resulting 

所以我想,在節點& Chrome檢查,簡單地輸出數量。

console.log(10150663120210603); 
// 10150663120210604 actually resulting 

有什麼瘋狂的方式,hackish的或不是,做一個變量等於10150663120210603.還是必須使用字符串?

+2

這是一個相同的問題,因爲*中只有浮點數*。 – Bergi 2012-02-21 02:30:57

+0

我忘記了一個事實。 – Marshall 2012-02-21 02:34:52

+0

你想要這個號碼爲什麼?確實存在用於JS的高檔文庫,例如http://jsfromhell.com/classes/bignumber – 2012-02-21 02:52:01

回答

3

JavaScript中的浮點數是64位IEEE-754浮點值。他們只有52位的尾數,你的數字需要54位來表示。它只是四捨五入。

如果四捨五入爲10150663120210604它可以用52位表示。

1

JavaScript代表使用IEEE-754雙精度(64位)格式的數字。據我瞭解,這給你53位精度,或十五至十六位十進制數字。你的號碼比JavaScript所能處理的位數更多,所以你最終得到了一個近似值。

如果您不需要對數字進行任何數學運算,那麼最簡單的解決方法就是將它們表示爲字符串。

否則,您可以使用big int library(或實施您自己的)。