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;
}

 

posted @ 2013-09-26 21:08  残星  阅读(2518)  评论(0编辑  收藏  举报