基礎(chǔ)知識(shí)
js內(nèi)部所有數(shù)字在計(jì)算機(jī)內(nèi)存中的表示都是64位雙精度浮點(diǎn)數(shù)
雙精度浮點(diǎn)數(shù)表示法的副作用
使用二進(jìn)制浮點(diǎn)數(shù)(使用IEEE 754的所有語言)的最著名副作用是:
0.1 + 0.2 === 0.3; // false
js最大安全整數(shù)的概念
Number.MAX_SAFE_INTEGER // 9007199254740991
這個(gè)數(shù)字形成的原因是,Javascript 使用 IEEE 754 中規(guī)定的雙精度浮點(diǎn)數(shù)。所謂安全是指在這個(gè)范圍內(nèi)的整數(shù),js可以精確地進(jìn)行表示并精確地進(jìn)行比較運(yùn)算,否則就會(huì)輸出錯(cuò)誤的值。
國(guó)際標(biāo)準(zhǔn) IEEE 754 規(guī)定,有效數(shù)字第一位默認(rèn)總是1,不保存在64位浮點(diǎn)數(shù)之中。也就是說,有效數(shù)字總是1.xxxx的形式,其中xxxx的部分(稱為尾數(shù)或有效數(shù)字,負(fù)責(zé)數(shù)字的精度)保存在64位浮點(diǎn)數(shù)(見
fraction部分,共52位),最長(zhǎng)可能為52位。因此(算上第一位不顯示的位)JavaScript 提供的有效數(shù)字最長(zhǎng)為53個(gè)二進(jìn)制位。
精度最多只能到53個(gè)二進(jìn)制位,這意味著,絕對(duì)值小于2的53次方的整數(shù),即-(253-1)到253-1,都可以精確表示。
參考
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/MAX_SAFE_INTEGER
http://javascript.ruanyifeng.com/grammar/number.html#toc1