js加减乘除丢失精度问题解决方法

来源:互联网 发布:北师大网络教育平台 编辑:程序博客网 时间:2024/06/05 16:17
<script type="text/javascript">    // 两个浮点数求和    function accAdd(num1,num2){       var r1,r2,m;       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));       // return (num1*m+num2*m)/m;       return Math.round(num1*m+num2*m)/m;    }        // 两个浮点数相减    function accSub(num1,num2){       var r1,r2,m;       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 (Math.round(num1*m-num2*m)/m).toFixed(n);    }    // 两个浮点数相除    function accDiv(num1,num2){       var t1,t2,r1,r2;       try{           t1 = num1.toString().split('.')[1].length;       }catch(e){           t1 = 0;       }       try{           t2=num2.toString().split(".")[1].length;       }catch(e){           t2=0;       }       r1=Number(num1.toString().replace(".",""));       r2=Number(num2.toString().replace(".",""));       return (r1/r2)*Math.pow(10,t2-t1);    }           // 两个浮点数相乘    function accMul(num1,num2){       var m=0,s1=num1.toString(),s2=num2.toString();     try{m+=s1.split(".")[1].length}catch(e){};    try{m+=s2.split(".")[1].length}catch(e){};    return Number(s1.replace(".",""))*Number(s2.replace(".",""))/Math.pow(10,m);    }      </script>    <script>    document.write("使用js原生态方法");    document.write("<br/> 1.01 + 1.02 ="+(1.01 + 1.02));    document.write("<br/> 1.01 - 1.02 ="+(1.01 - 1.02));    document.write("<br/> 0.000001 / 0.0001 ="+(0.000001 / 0.0001));    document.write("<br/> 0.012345 * 0.000001 ="+(0.012345 * 0.000001));    document.write("<br/><hr/>");    document.write("<br/>使用自定义方法");    document.write("<br/> 1.01 + 1.02 ="+accAdd(1.01,1.02));    document.write("<br/> 1.01 - 1.02 ="+accSub(1.01,1.02));    document.write("<br/> 0.000001 / 0.0001 ="+accDiv(0.000001,0.0001));    document.write("<br/> 0.012345 * 0.000001 ="+accMul(0.012345,0.000001));  </script>
0 0
原创粉丝点击