JS 浮點計算BUG

2022-02-14 06:05:59 字數 935 閱讀 3860

最近做專案的時候遇到乙個比較糾結的js浮點計算問題。

當時是做利率計算,因為利率大多數涉及到小數點,精度要求也很高。

0.6+0.1+0.1=?

結果出現:0.7999999999999

網上查詢了一下,這確實是乙個缺陷(bug)

不僅加,只要涉及到浮點計算減成除一樣會出現類似情況

先看看demo:

將0.1~10,加0.1+0.1  進行測試

1         $(function

() 7

alert(content);

8 });

執行結果:

解決方法:

根據tofixed方法,我們修改一下,修改乙個toround方法,可對小數點精準四捨五入:

1         number.prototype.toround = function

(d)2

)?)\\d*$").test(s))

6 else

break

;}12

}13 s=a.join("").replace(new regexp("(\\d+)(\\d)\\d$"),"$1.$2");

14 }if(b)s=s.substr(1);return (pm+s).replace(/\.$/, "");} return

this+"";

15 };

改一下demo中的方法,呼叫toround方法:

var result = (i+0.1+0.1).toround(2);
結果:

js浮點乘除bug

在做專案的時候涉及到百分數小數的顯示轉化,對小數進行乘除發現出不精確的問題,比如 a 0.69,c a 10,得到的確是6.8999999999999995,這是乙個js浮點數運算bug,於是找到了乘除的解決辦法,如下 function floatmul arg1,arg2 catch e try ...

js浮點數的計算

js在計算浮點數時可能不夠準確,會產生捨入誤差的問題,這是使用基於ieee745數值的浮點計算的通病,並非ecmascript一家,其他使用相同數值格式的語言也存在這個問題。這裡講一下js浮點數加 減 乘 除的正確做法。整數的乘法運算是準確的,這裡我們將浮點數的乘法運算轉化為整數乘法,然後除以10的...

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

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