js浮點數精度問題 js計算中遇到的坑

2021-07-30 05:06:17 字數 602 閱讀 3262

**:

大多數語言在處理浮點數的時候都會遇到精度問題,但是在js裡似乎特別嚴重,來看乙個例子

alert(45.6*13);
結果居然是592.800000000001,當然加法之類的也會有這個問題

那這是js的錯誤嗎?

當然不是,你的電腦做著正確的二進位制浮點運算,但問題是你輸入的是十進位制的數,電腦以二進位制運算,這兩者並不是總是轉化那麼好的,有時候會得到正確的結果,但有時候就不那麼幸運了

alert(0.7+0.1);//輸出0.7999999999999999

alert(0.6+0.2);//輸出0.8

你輸入兩個十進位制數,轉化為二進位制運算過後再轉化回來,在轉化過程中自然會有損失了

但一般的損失往往在乘除運算中比較多,而js在簡單的加減法裡也會出現這類問題,你也看到了,這個誤差也是非常小的,但是卻是不該出現的

那該怎麼解決呢,ecma4似乎給了解決方法,但是現在倒不是那麼實用的

一種方法,比如0.7+0.1,先把0.1和0.7都乘10,加完之後再除10

另外可以自己寫點函式來解

js浮點數精度問題 js計算中遇到的坑

大多數語言在處理浮點數的時候都會遇到精度問題,但是在js裡似乎特別嚴重,來看乙個例子 alert 45.6 13 結果居然是592.800000000001,當然加法之類的也會有這個問題 那這是js的錯誤嗎?當然不是,你的電腦做著正確的二進位制浮點運算,但問題是你輸入的是十進位制的數,電腦以二進位制...

JS之浮點數精度丟失問題

js中,在進行浮點數計算的時候,會出現精度丟失的問題,如下 alert 0.1 0.2 alert 0.3 0.2 alert 0.1 0.2 alert 0.3 0.2 正常情況,得出的結果應該是0.3,0.1,0.02,1.5,但是實際得出的結果卻不是這樣,如下 可以看到,得出的結果並不是我們預...

js高精度浮點數運算

貼 自定義高精度浮點數運算 物件格式寫法 var float calculator catch e m math.pow 10,math.max r1,r2 計算因子 return arg1 m arg2 m m minus function arg1,arg2 mul function arg1,...