zoukankan      html  css  js  c++  java
  • JS浮点数运算

    //乘法函数,用来得到精确的乘法结果 
    //说明:javascript的乘法结果会有误差,在两个浮点数相乘的时候会比较明显。这个函数返回较为精确的乘法结果。 
    //调用:accMul(arg1,arg2) 
    //返回值:arg1乘以arg2的精确结果 
    function accMul(arg1,arg2) 
    { 
        var m=0,s1=arg1.toString(),s2=arg2.toString(); 
        try{
            if(s1.split(".")[1] != undefined )
                m+=s1.split(".")[1].length
        }catch(e){} 
        try{
            if(s2.split(".")[1] != undefined )
                m+=s2.split(".")[1].length
        }catch(e){} 
        return Number(s1.replace(".",""))*Number(s2.replace(".",""))/Math.pow(10,m) 
    } 
      
    //浮点数除法运算  
     function accDiv(arg1,arg2){   
        var r1=0,r2=0,m,s1=arg1.toString(),s2=arg2.toString();  
        try{
            if(s1.split(".")[1] != undefined )
                r1=s1.split(".")[1].length;
        }catch(e){} 
        try{
            if(s2.split(".")[1] != undefined )
                r2=s2.split(".")[1].length;
        }catch(e){} 
        m=Math.pow(10,Math.max(r1,r2));   
        return (accMul(arg1,m))/(accMul(arg2,m));   
    }   
    
    function accAdd(arg1,arg2){ 
        var r1=0,r2=0,m,s1=arg1.toString(),s2=arg2.toString();  
        try{
            if(s1.split(".")[1] != undefined )
                r1=s1.split(".")[1].length;
        }catch(e){} 
        try{
            if(s2.split(".")[1] != undefined )
                r2=s2.split(".")[1].length;
        }catch(e){} 
        m=Math.pow(10,Math.max(r1,r2)); 
        return (accMul(arg1,m)+accMul(arg2,m))/m; 
    } 
    
    function Subtr(arg1,arg2){
         var r1=0,r2=0,m,n,s1=arg1.toString(),s2=arg2.toString();
         try{
             if(s1.split(".")[1] != undefined )
                 r1=s1.split(".")[1].length;
         }catch(e){}
         try{
             if(s2.split(".")[1] != undefined )
                 r2=s2.split(".")[1].length;
         }catch(e){}
         m=Math.pow(10,Math.max(r1,r2));
         //last modify by deeka
         //动态控制精度长度
         n=(r1>=r2)?r1:r2;
         return (accMul(arg1,m)-accMul(arg2,m))/m;
    }
  • 相关阅读:
    关于数据库 长度和小数点的关系和坑
    温故而知新,jquery选择器$=
    局域网访问本地localhost页面
    解决谷歌浏览器和360浏览器 input 自动填充淡黄色背景色的问题
    抢月饼 浏览器插件开发
    css 多行溢出
    ss服务待研究
    NUnit笔记
    5分钟实现VS2010整合NUnit进行单元测试
    vs2010中使用Nunit测试c#代码结果的正确性
  • 原文地址:https://www.cnblogs.com/mingforyou/p/3341519.html
Copyright © 2011-2022 走看看