js fixed 四舍五入问题,发现只有这个可靠些

    xiaoxiao2021-12-14  21

    试过几个,经过改造,发现只有这个可靠些

    Number.prototype.toFixed=function(len) { var tempNum = 0; var s,temp; var s1 = this + ""; var start = s1.indexOf("."); //截取小数点后,0之后的数字,判断是否大于5,如果大于5这入为1 if(s1.substr(start+len+1,1)>=5) tempNum=1; //计算10的len次方,把原数字扩大它要保留的小数位数的倍数 var temp = Math.pow(10,len); //求最接近this * temp的最小数字 //floor() 方法执行的是向下取整计算,它返回的是小于或等于函数参数,并且与之最接近的整数 s = comm.accAdd( Math.floor( comm.accMul( this , temp)) , tempNum); return comm.accDiv(s,temp); }

    其中comm.accAdd,comm.accMul,comm.accDiv

    comm ={ /* * 解决运算精度问题 * */ accDiv : function(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); } } , accMul : function(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) } , accAdd : function(arg1,arg2){ //两数相加 var r1,r2,m; 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)) return (arg1*m+arg2*m)/m } }

    转载请注明原文地址: https://ju.6miu.com/read-963129.html

    最新回复(0)