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

来源:互联网 发布:给男朋友织围巾知乎 编辑:程序博客网 时间:2024/06/06 19:52

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

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


0 0
原创粉丝点击