| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190 | //本js引入是为了浮点小数运算结果不精确bug的办法,来源: http://blog.csdn.net/yao_jing/article/details/50778011//除法函数,用来得到精确的除法结果//说明:javascript的除法结果会有误差,在两个浮点数相除的时候会比较明显。这个函数返回较为精确的除法结果。//调用:accDiv(arg1,arg2)//返回值:arg1除以arg2的精确结果function accDiv(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){}    with(Math){        r1=Number(arg1.toString().replace(".",""));        r2=Number(arg2.toString().replace(".",""));        return (r1/r2)*pow(10,t2-t1);    }}//给Number类型增加一个div方法,调用起来更加方便。Number.prototype.div = function (arg){    return accDiv(this, arg);};//乘法函数,用来得到精确的乘法结果//说明:javascript的乘法结果会有误差,在两个浮点数相乘的时候会比较明显。这个函数返回较为精确的乘法结果。//调用:accMul(arg1,arg2)//返回值:arg1乘以arg2的精确结果function accMul(arg1,arg2){    var m=0,s1=arg1.toString(),s2=arg2.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);}//给Number类型增加一个mul方法,调用起来更加方便。Number.prototype.mul = function (arg){    return accMul(arg, this);};//加法函数,用来得到精确的加法结果//说明:javascript的加法结果会有误差,在两个浮点数相加的时候会比较明显。这个函数返回较为精确的加法结果。//调用:accAdd(arg1,arg2)//返回值:arg1加上arg2的精确结果function accAdd(arg1,arg2){    var r1,r2,m,c;    try{r1=arg1.toString().split(".")[1].length}catch(e){r1=0}    try{r2=arg2.toString().split(".")[1].length}catch(e){r2=0}    c=Math.abs(r1-r2);    m=Math.pow(10,Math.max(r1,r2));    if(c>0){        var cm=Math.pow(10,c);        if(r1>r2){            arg1=Number(arg1.toString().replace(".",""));            arg2=Number(arg2.toString().replace(".",""))*cm;        }else{            arg1=Number(arg1.toString().replace(".",""))*cm;            arg2=Number(arg2.toString().replace(".",""));        }    } else {        arg1=Number(arg1.toString().replace(".",""));        arg2=Number(arg2.toString().replace(".",""));    }    return (arg1+arg2)/m;    //return (arg1*m+arg2*m)/m;}//给Number类型增加一个add方法,调用起来更加方便。Number.prototype.add = function (arg){    return accAdd(arg,this);};//减法函数function accSub(arg1,arg2){    var r1,r2,m,n;    try{r1=arg1.toString().split(".")[1].length}catch(e){r1=0}    try{r2=arg2.toString().split(".")[1].length}catch(e){r2=0}    m=Math.pow(10,Math.max(r1,r2));    //last modify by deeka    //动态控制精度长度    n=(r1>=r2)?r1:r2;    return ((arg2*m-arg1*m)/m).toFixed(n);}///给number类增加一个sub方法,调用起来更加方便Number.prototype.sub = function (arg){    return accSub(arg,this);};//四舍五入或末尾加零,实现类似php的 sprintf("%.".decimal."f", val);// function roundnum(val,decimals){//     if(val !== ''){//         val = parseFloat(val);//         if(decimals < 1){//             val = (Math.round(val)).toString();//         }else{//             let num = val.toString();//             if(num.lastIndexOf('.') == -1){//                 num += '.';//                 num += makezero(decimals);//                 val = num;//             }else{//                 let valdecimals = num.split('.')[1].length;//                 if(parseInt(valdecimals) < parseInt(decimals)){//                     num += makezero(parseInt(decimals)-parseInt(valdecimals));//                     val = num;//                 }else if(parseInt(valdecimals) > parseInt(decimals)){//                     val = parseFloat(val) != 0 ? Math.round(val.mul(makemultiple(decimals))).div(makemultiple(decimals)) : makedecimalzero(decimals);//                     let num = val.toString();//                     if(num.lastIndexOf('.') == -1){//                         num += '.';//                         num += makezero(decimals);//                         val = num;//                     }else {//                         let valdecimals = num.split('.')[1].length;//                         if (parseInt(valdecimals) < parseInt(decimals)) {//                             num += makezero(parseInt(decimals) - parseInt(valdecimals));//                             val = num;//                         }//                     }//                 }//             }//         }//     }//     return val;// }//四舍五入function roundnum(val,decimals){    if(val !== ''){        val = parseFloat(val);        if(decimals < 1){            val = (Math.round(val)).toString();        }else{            let num = val.toString();            if(num.lastIndexOf('.') == -1){                // num += '.';                // num += makezero(decimals);                val = num;            }else{                let valdecimals = num.split('.')[1].length;                if(parseInt(valdecimals) < parseInt(decimals)){                    // num += makezero(parseInt(decimals)-parseInt(valdecimals));                    val = num;                }else if(parseInt(valdecimals) > parseInt(decimals)){                    val = parseFloat(val) != 0 ? Math.round(val.mul(makemultiple(decimals))).div(makemultiple(decimals)) : makedecimalzero(decimals);                    let num = val.toString();                    if(num.lastIndexOf('.') == -1){                        // num += '.';                        // num += makezero(decimals);                        val = num;                    }else {                        let valdecimals = num.split('.')[1].length;                        if (parseInt(valdecimals) < parseInt(decimals)) {                            // num += makezero(parseInt(decimals) - parseInt(valdecimals));                            val = num;                        }                    }                }            }        }    }    return val;}//根据位数生成编号,3位-》001 ,5位-》00001function makenum(num){    let arr = new Array(num);    for(let i=0;i< num;i++){        if(i != num-1){            arr[i] = 0;        }else{            arr[i] = 1;        }    }    return arr.join('');}//生成num位的0function makezero(num){    let arr = new Array(num);    for(let i=0;i< num;i++){        arr[i] = 0;    }    return arr.join('');}//生成num小数位数的0.function makedecimalzero(num){    if(num < 1){        return '0';    }else{        return '0.'+makezero(num);    }}//生成num位的10倍数function makemultiple(num){    return Math.pow(10,parseInt(num));}
 |