不老實的Number類型

為什么說Number類型不老實呢,相信大家都多多少少的在開發(fā)中遇到過小數(shù)計算不精確的問題,比如0.1+0.2!==0.3 、0.1 + 0.7 !==0.8等,下面我們來追本溯源,看看為什么會出現(xiàn)這種現(xiàn)象,以及該如何避免。

精度丟失

計算機中所有的數(shù)據(jù)都是以二進制存儲的,所以在計算時計算機要把數(shù)據(jù)先轉(zhuǎn)換成二進制進行計算,然后在把計算結(jié)果轉(zhuǎn)換成十進制。

但在計算0.1+0.2時,二進制計算發(fā)生了精度丟失,導(dǎo)致再轉(zhuǎn)換成十進制后和預(yù)計的結(jié)果不符。

對結(jié)果的分析—更多的問題

0.1和0.2的二進制都是以1100無限循環(huán)的小數(shù),下面逐個來看JS幫我們計算所得的結(jié)果:

0.1的二進制:

0.0001100110011001100110011001100110011001100110011001101

0.2的二進制:

0.001100110011001100110011001100110011001100110011001101

理論上講,由上面的結(jié)果相加應(yīng)該::

0.0100110011001100110011001100110011001100110011001100111

實際JS計算得到的0.1+0.2的二進制

0.0100110011001100110011001100110011001100110011001101

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容