toFixed其实不是真正的四舍五入而是四舍六入?

        最近在工作开发过程中遇到一个奇怪的问题,本来应该四舍五入取整计算的地方偶尔出现四舍五入没生效,直接舍去了最后一位小数的情况。百度后才发现tofixed执行的并不是严格意义上的四舍五入,而是银行家四舍五入

        要解决问题也很简单,使用Math.round进行四舍五入就好了。

        但是!

        在实际代码开发过程中,可能并不是直接一个数字来进行处理,而是需要对某两个或者更多个变量进行计算之后再去四舍五入取值。这是会遇到精度丢失的问题,从而导致Math.round也不能百分百完成我们所需要实现的效果。

        所以自己使用tofixed和Math.round结合写了一个js方法,使需要计算时也能很好的达到四舍五入的效果。(当然还会有更好的方法这里只是个人的方法记录一下)


/**
 * 四舍五入避免精度丢失和四舍六入的情况出现
 * @param decimal 数字
 * @param digits 保留几位小数
 * @returns
 */
export const formatRound = (decimal = 0, digits = 2) => {
  // 如果传进来的不能转为数字,则返回0,同时应该上报异常
  if (decimal === undefined || Number.isNaN(decimal)) {
    return '0';
  }
  // 保留几位小数
  const powValue = Math.pow(10, digits)
  // 四舍五入
  const value = (Math.round((Number(decimal) * powValue).toFixed(2)) / powValue).toFixed(2);
  return value;
};

        以上。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值