2016-02-28 228 views
2

我正面臨奇怪的問題。當輸入超過16位數字時遇到parseFloat問題

parseFloat(11111111111111111)將其轉換爲11111111111111112

我注意到,它工作正常,直到length is 16但四捨五入較高時輸入length is > 16.

我希望它被執行後保留在parseFloat傳遞的原始值。

任何幫助?

回答

2

整數(沒有周期或指數符號的數字)被認爲是精確到15位數。

更多信息here

+0

[您應該閱讀此](http://www.w3fools.com/) –

+0

@RajaprabhuAravindasamy感謝您的建議,我明白了。 –

1

號碼以JavaScript使用的是64位浮點值來表示(因此在其他語言稱爲doubles)。

doubles最多可容納15/16位有效數字(取決於數字大小)。由於double的範圍是1.7E +/- 308,因此某些數字只能被double約束,在您的情況下,11111111111111111不能完全表示,但會被11111111111111112的值約束。如果這聽起來很奇怪,那麼記住0.3不能完全表示爲雙重。

double可以在範圍+/- 2^53中保持精確的整數值,當您在此範圍內操作時 - 您可能會得到確切的值。

0

嘗試使用一元運算符+。 +(「1111111111111111」)+ 1 = 1111111111111112

0

正如您在following blog post中看到的,JavaScript僅支持53位整數。

,如果你在控制檯輸入 var x = 11111111111111111 然後鍵入 x 你會得到 11111111111111112 這有什麼好做的parseFloat方法。

還有一個相關問題here關於在JavaScript中使用大數字。

1

Javascript有一個常量,Number.MAX_SAFE_INTEGER這是可以精確表示的最高整數。

本文中的安全性指的是準確表示整數並正確比較它們的能力。例如,Number.MAX_SAFE_INTEGER + 1 === Number.MAX_SAFE_INTEGER + 2將評估爲true,這在數學上不正確。

該值爲9007199254740991(2^53 - 1),它使最多15個數字安全。