//本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 === null) { return ''; } if(val !== ''){ val = parseFloat(val); let _sign = (val < 0) ? -1 : 1; if(decimals < 1){ val = (Math.round(val*_sign)/_sign).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)*_sign)).div(makemultiple(decimals)*_sign) : 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位-》00001 function 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位的0 function 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)); }