重写toFixed方法,实现四舍五入保留小数

思路:

首次,将数分为整数和小数部分。

其次,判断小数部分是否超出要保留的位数,如果超出,则将超出的部分作为新的小数,使用Math库中round方法去四舍五入取整得出进位(0或者1)。

最后,将此进位数加上保留的小数部分,如果结果多出位数说明失去小数部分需要向整数进位了,否则则输出,整数+小数点+(保留的小数部分+进位数)。

  /**
   * arg以四舍五入的方式保留小数点后n位
   */
  function toFixed(arg, n) {
    if(n == 0) {
      return Math.round(arg)
    }
    try {
      var d, carryD, i, 
      ds = arg.toString().split('.'),
      len = ds[1].length,
      b0 = '', k = 0
      if (len > n) {
        while(k < n && ds[1].substring(0, ++k) == '0') {
          b0 += '0'
        }
        d = Number(ds[1].substring(0, n))
        carryD = Math.round(Number('0.' + ds[1].substring(n, len)))
        len = (d + carryD).toString().length
        if (len > n) {
          return Number(ds[0]) + 1
        } else if (len == n) {
          return Number(ds[0] + '.' + (d + carryD))
        }
        return Number(ds[0] + '.' + b0 + (d + carryD))
      }
    } catch (e) {}
    return arg
  }

 

 

你可能感兴趣的:(前端)