toFixed保留两位小数但是四舍六入……

文章讲述了在处理支付时遇到的toFixed四舍六入问题,作者提供了两种方法解决toFixed保留两位小数时的精度问题,确保正确计算应付金额(0.83元)。
摘要由CSDN通过智能技术生成

需求:想要保留两位小数,且四舍五入

问题:在一次支付中,面值1元,折扣8.25折,提交订单一直出错,才发现是toFixed的锅,按理说我应该支付0.83,但是如图

toFixed是四舍六入

解决:

//修改toFixed精度不准确
myFixed(target,length) {
			var str = target + ''; //将调用该方法的数字转为字符串
			  var dot = str.indexOf("."); //找到小数点的位置
			  var decimal = str.split(".")[1];
			
			  if(dot!=-1){
			    if(decimal.length === length) return str;
			    if(decimal.length <= length){//小数位少于补零
			      let n = "";
			      for (let i=0; i<length-decimal.length; i++){
			        n += "0";
			      }
			      return str+n;
			    }else{//小数位多于做四舍五入
			      if(Number(decimal[length])>=5){
			          let s=parseInt(decimal[length-1])+1;
			          let d = decimal.slice(0,length-1);
			          decimal =d+s.toString();
			          //decimal = decimal.slice(0,length-1);
			          return str.split(".")[0]+"."+decimal;
			      }else{
			        decimal = decimal.split("").splice(0,length).join("");
			        return str.split(".")[0]+"."+decimal;
			      }
			    }
			  }else{//整数补零
			    let n = "";
			    for (let i=0; i<length; i++){
			        n += "0";
			      }
			      return str+"."+n;
			  }
			}

或者下面这个方法也可以

function myFixed(val,num){
    var scale = Math.pow(10, num); 
    var numVal = (val * scale).toFixed(num); // 以便四舍五入  
    var rounded = Math.round(parseFloat(numVal)); // 将字符串转回数字并进行四舍五入  
    return (rounded / scale).toFixed(num);
}

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值