1. 程式人生 > 程式設計 >詳解JavaScript中精度失準問題及解決方法

詳解JavaScript中精度失準問題及解決方法

首先來看一下JavaScript中的數字型別的儲存情況

①JS中所有的數字(小數、整型)都是浮點型
②JS中小數、整型都是Number型別
③JS中Number型別使用binary64或雙精度表示的,實質是一個二進位制格式64位的浮點數
④64位的二進位制具體為最高的1位是符號位,接著的11位是指數,剩下的52位為有效數字
⑤符號位決定了一個數的正負,指數部分決定了數值的大小,小數部分決定了數值的精度,因此,JavaScript提供的有效

數字最長為53個二進位制位(64位浮點的後52位+有效數字第一位的1)

詳解JavaScript中精度失準問題及解決方法

知道Number的具體儲存特徵後,我們再來分析一下小數精度丟失的原因

小數進行算術運算時,實質上就是把十進位制的浮點數轉化為二進位制,這樣的結果是無窮的,JS最多有2的53次方有效數字,並不是精準的,所以再進行運算時會失準

那麼JS可以儲存最大的數字和最大安全數字是什麼呢?可以使用Number的屬性進行表示

JS儲存最大值:Number.Max_VALUE()
JS最大安全值:Number.Max_SAFE_INTERGER(),即2的53次方

最後看一下處理大數字(超出範圍)的方法及避免精度丟失的方法

避免精度丟失方法:toFixed()方法,先進行四捨五入取有效的小數位數,然後使用parseFloat()返回浮點數
處理大數字的方法:
①使用big-integer處理大數
②將數字變為字串進行處理

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。