1. 程式人生 > >js中小數運算精度丟失問題

js中小數運算精度丟失問題

在js中做一些計算的時候,如果直接計算有可能造成精度丟失,比如在計算1.79 + 0.12的時候,直接計算的結果就是1.9100000000000001,但是我們知道正確的計算結果應該1.91.我的解決辦法如下(直接放程式碼)

<html>
    <body>
        <input type="button" name="name" value="xxxx" onclick="test()"/>
    </body>
    <script language="javascript">
        function add(num1,num2){
            var r1
,r2,m,n; try{r1=num1.toString().split(".")[1].length}catch(e){r1=0} try{r2=num2.toString().split(".")[1].length}catch(e){r2=0} m = Math.pow(10,Math.max(r1,r2)); n = (r1>=r2)?r1:r2; return ((num1*m + num2*m)/m).toFixed(n); } function sub
(num1,num2){ var r1,r2,m,n; try{r1=num1.toString().split(".")[1].length}catch(e){r1=0} try{r2=num2.toString().split(".")[1].length}catch(e){r2=0} n = (r1>=r2)?r1:r2; m = Math.pow(10,Math.max(r1,r2)); return ((num1*m - num2*m)/m).toFixed
(n); } function mul(num1,num2){ var m = 0; try{m+=num1.toString().split(".")[1].length}catch(e){} try{m+=num2.toString().split(".")[1].length}catch(e){} return (Number(num1.toString().replace(".",""))*Number(num2.toString().replace(".","")))/Math.pow(10,m) } function div(arg1,arg2){ var t1=0,t2=0,r1,r2; try{t1=arg1.toString().split(".")[1].length}catch(e){} try{t2=arg2.toString().split(".")[1].length}catch(e){} r1=Number(arg1.toString().replace(".","")); r2=Number(arg2.toString().replace(".","")); return (r1/r2)*Math.pow(10,t2-t1); } function test(){ var _add = 1.79 + 0.12; var _add2 = add(1.79,0.12); var _sub = 2.01 - 0.12; var _sub2 = sub(2.01,0.12); var _mul = 1.01 * 1.3; var _mul2 = mul(1.01,1.3); var _div = 0.69 / 10; var _div2 = div(0.69,10); alert("加法:處理前1.79 + 0.12 = " +_add + " 處理後 1.79 + 0.12 = " + _add2 + "\n" + "減法:處理前2.01 - 0.12 = " +_sub + " 處理後 2.01 - 0.12 = " + _sub2 + "\n" + "乘法:處理前1.01 * 1.3 = " +_mul + " 處理後 1.01 * 1.3 = " + _mul2 + "\n" + "除法:處理前0.69 / 10 = " +_div + " 處理後 0.69 / 10 = " + _div2 + "\n" ); } </script> </html>

執行結果如圖
這裡寫圖片描述