js的精确计算

时间:2025-01-26 16:46:05
//加法函数,用来得到精确的加法结果 
//javascript的加法结果会有误差,在两个浮点数相加的时候会比较明显。这个函数返回较为精确的加法结果。 
function accAdd(arg1,arg2){ 
 
    var r1,r2,m;
 
    try{r1=().split(".")[1].length}catch(e){r1=0}
 
    try{r2=().split(".")[1].length}catch(e){r2=0}
 
    m=(10,(r1,r2));
 
    return (accMul(arg1,m)+accMul(arg2,m))/m; 
 
}
 
//javascript的乘法结果会有误差,在两个浮点数相乘的时候会比较明显。这个函数返回较为精确的乘法结果。 
function accMul(arg1,arg2){ 
 
    var m=0,s1=(),s2=(); 
 
    try{m+=(".")[1].length}catch(e){} 
 
    try{m+=(".")[1].length}catch(e){} 
 
    return Number((".",""))*Number((".",""))/(10,m) 
 
}
(function () {
    var calc = {
        /*
        函数,加法函数,用来得到精确的加法结果  
        说明:javascript的加法结果会有误差,在两个浮点数相加的时候会比较明显。这个函数返回较为精确的加法结果。
        参数:arg1:第一个加数;arg2第二个加数;d要保留的小数位数(可以不传此参数,如果不传则不处理小数位数)
        调用:(arg1,arg2,d)  
        返回值:两数相加的结果
        */
        Add: function (arg1, arg2) {
            arg1 = (), arg2 = ();
            var arg1Arr = ("."), arg2Arr = ("."), d1 =  == 2 ? arg1Arr[1] : "", d2 =  == 2 ? arg2Arr[1] : "";
            var maxLen = (, );
            var m = (10, maxLen);
            var result = Number(((arg1 * m + arg2 * m) / m).toFixed(maxLen));
            var d = arguments[2];
            return typeof d === "number" ? Number((result).toFixed(d)) : result;
        },
        /*
        函数:减法函数,用来得到精确的减法结果  
        说明:函数返回较为精确的减法结果。 
        参数:arg1:第一个加数;arg2第二个加数;d要保留的小数位数(可以不传此参数,如果不传则不处理小数位数
        调用:(arg1,arg2)  
        返回值:两数相减的结果
        */
        Sub: function (arg1, arg2) {
            return (arg1, -Number(arg2), arguments[2]);
        },
        /*
        函数:乘法函数,用来得到精确的乘法结果  
        说明:函数返回较为精确的乘法结果。 
        参数:arg1:第一个乘数;arg2第二个乘数;d要保留的小数位数(可以不传此参数,如果不传则不处理小数位数)
        调用:(arg1,arg2)  
        返回值:两数相乘的结果
        */
        Mul: function (arg1, arg2) {
            var r1 = (), r2 = (), m, resultVal, d = arguments[2];
            m = ((".")[1] ? (".")[1].length : 0) + ((".")[1] ? (".")[1].length : 0);
            resultVal = Number((".", "")) * Number((".", "")) / (10, m);
            return typeof d !== "number" ? Number(resultVal) : Number((parseInt(d)));
        },
        /*
        函数:除法函数,用来得到精确的除法结果  
        说明:函数返回较为精确的除法结果。 
        参数:arg1:除数;arg2被除数;d要保留的小数位数(可以不传此参数,如果不传则不处理小数位数)
        调用:(arg1,arg2)  
        返回值:arg1除于arg2的结果
        */
        Div: function (arg1, arg2) {
            var r1 = (), r2 = (), m, resultVal, d = arguments[2];
            m = ((".")[1] ? (".")[1].length : 0) - ((".")[1] ? (".")[1].length : 0);
            resultVal = Number((".", "")) / Number((".", "")) * (10, m);
            return typeof d !== "number" ? Number(resultVal) : Number((parseInt(d)));
        }
    };
     = calc;
}());