首先來看一下JavaScript中的數字類型的存儲狀況
①JS中全部的數字(小數、整型)都是浮點型
②JS中小數、整型都是Number類型
③JS中Number類型使用binary64或雙精度表示的,實質是一個二進制格式64位的浮點數
④64位的二進制具體爲最高的1位是符號位,接着的11位是指數,剩下的52位爲有效數字
⑤符號位決定了一個數的正負,指數部分決定了數值的大小,小數部分決定了數值的精度,所以,JavaScript提供的有效數字最長爲53個二進制位(64位浮點的後52位+有效數字第一位的1)
知道Number的具體存儲特徵後,咱們再來分析一下小數精度丟失的緣由
小數進行算術運算時,實質上就是把十進制的浮點數轉化爲二進制,這樣的結果是無窮的,JS最多有2的53次方有效數字,並非精準的,因此再進行運算時會失準安全
那麼JS能夠存儲最大的數字和最大安全數字是什麼呢?能夠使用Number的屬性進行表示
JS存儲最大值:Number.Max_VALUE()
JS最大安全值:Number.Max_SAFE_INTERGER(),即2的53次方spa
最後看一下處理大數字(超出範圍)的方法及避免精度丟失的方法
避免精度丟失方法:toFixed()方法,先進行四捨五入取有效的小數位數,而後使用parseFloat()返回浮點數
處理大數字的方法:
①使用big-integer處理大數
②將數字變爲字符串進行處理blog