四舍五入的方式保留小数

186 阅读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
  }