2013-08-26 41 views
0

在節點v0.8.15和螢火蟲試過這樣:爲什麼javascript在toString方法中用0代替數字?

(123123123123123123123).toString(10)

結果: '123123123123123130000'

任何人都知道這是怎麼回事?

+1

浮點數的精度有限。 –

+1

我猜它是用整數溢出來做的。快速谷歌搜索顯示'9007199254740992'是javascript中的最大int值,不會降低精度。 – underbar

+1

@underbar:沒有。 JavaScript中沒有整數(除非按位操作),因此沒有溢出。 – Bergi

回答

2

JavaScript將數字存儲爲64位浮點IEEE 754值,因此最大精度爲2^53(9007199254740992)。任何超出,而最低顯著數字只是設置爲0

例如:

(9007199254740992).toString() // 9007199254740992 
(90071992547409925).toString() // 90071992547409920 
(900719925474099255).toString() // 900719925474099200 
// etc 

如果你真的需要的精度許多數字,你應該尋找到一個庫,如bignum(作者有用地列出了其他這樣的庫)。

2

javascript中的所有數字(與許多其他語言不同)存儲爲(AFAIK 64位)浮點數(從不是整數)。

如果你不熟悉如何工作的,這就像科學記數法(AKA標準形式):A * 10 b

當你鍵入123123123123123123123,實在是太大了,以適應a部分浮動。 a的值將被存儲爲1.2312312312312313,截斷最低值的溢出數字,並且b被設置爲20以提供儘可能好的原始值的近似值。當你得到字符串值時,計算出1.12312312312312313 * 10 ,給出123123123123123130000.

相關問題