我正面臨奇怪的問題。當輸入超過16位數字時遇到parseFloat問題
parseFloat(11111111111111111)
將其轉換爲11111111111111112
。
我注意到,它工作正常,直到length is 16
但四捨五入較高時輸入length is > 16.
我希望它被執行後保留在parseFloat
傳遞的原始值。
任何幫助?
我正面臨奇怪的問題。當輸入超過16位數字時遇到parseFloat問題
parseFloat(11111111111111111)
將其轉換爲11111111111111112
。
我注意到,它工作正常,直到length is 16
但四捨五入較高時輸入length is > 16.
我希望它被執行後保留在parseFloat
傳遞的原始值。
任何幫助?
整數(沒有周期或指數符號的數字)被認爲是精確到15位數。
更多信息here
號碼以JavaScript使用的是64位浮點值來表示(因此在其他語言稱爲doubles
)。
doubles
最多可容納15/16位有效數字(取決於數字大小)。由於double的範圍是1.7E +/- 308,因此某些數字只能被double
約束,在您的情況下,11111111111111111不能完全表示,但會被11111111111111112的值約束。如果這聽起來很奇怪,那麼記住0.3不能完全表示爲雙重。
double
可以在範圍+/- 2^53中保持精確的整數值,當您在此範圍內操作時 - 您可能會得到確切的值。
嘗試使用一元運算符+
。 +(「1111111111111111」)+ 1 = 1111111111111112
正如您在following blog post中看到的,JavaScript僅支持53位整數。
,如果你在控制檯輸入 var x = 11111111111111111
然後鍵入 x
你會得到 11111111111111112
這有什麼好做的parseFloat
方法。
還有一個相關問題here關於在JavaScript中使用大數字。
Javascript有一個常量,Number.MAX_SAFE_INTEGER這是可以精確表示的最高整數。
本文中的安全性指的是準確表示整數並正確比較它們的能力。例如,Number.MAX_SAFE_INTEGER + 1 === Number.MAX_SAFE_INTEGER + 2將評估爲true,這在數學上不正確。
該值爲9007199254740991(2^53 - 1),它使最多15個數字安全。
[您應該閱讀此](http://www.w3fools.com/) –
@RajaprabhuAravindasamy感謝您的建議,我明白了。 –