小数截取位数的方法

方法一 (不会四舍五入)

此方法不会进行四舍五入,而是直接截取,不足则补0,默认保留2位
val 为需要格式化的数值
dotIdx 为截取的位数
如:

const getFloatCut = (val, dotIdx=2) => {
  var re = new RegExp("([0-9]+\\.[0-9]{" + dotIdx + "})[0-9]*")
  var aNew = val.toString().replace(re, "$1");
  return parseFloat(aNew).toFixed(dotIdx)
}

getFloatCut(3,2)  //3.00
getFloatCut(3.999,2)  //3.99

方法二(会四舍五入)

此方法会进行四舍五入,不足则补0,默认保留2位
val 为需要格式化的数值
dotIdx 为截取的位数
如:

const getFloatCut = (val, dotIdx=2) => {
    var aNew = Math.round(val * Math.pow(10, dotIdx))
    aNew = aNew / Math.pow(10, dotIdx)
    return parseFloat(aNew).toFixed(dotIdx)
}

getFloatCut(3,2)  //3.00
getFloatCut(3.999,2)  //4.00

合并上述方法:

const getFloatCut = (val, dotIdx = 2, cutFlag = false) => {
  if (cutFlag) {
    // 不要四舍五入,直接截取
    // getFloatCut(3.99999,2,true) => 3.99
    var re = new RegExp("([0-9]+\\.[0-9]{" + dotIdx + "})[0-9]*")
    var aNew = val.toString().replace(re, "$1");
    return parseFloat(aNew).toFixed(dotIdx)
  } else {
    // 要四舍五入
    // getFloatCut(3.99999,2) => 4.00
    var aNew = Math.round(val * Math.pow(10, dotIdx))
    aNew = aNew / Math.pow(10, dotIdx)
    return parseFloat(aNew).toFixed(dotIdx)
  }
}

getFloatCut(3.99999,2,true)//3.99
getFloatCut(3.99999,2)//4.00

你可能感兴趣的:(小数截取位数的方法)