保留几位小数并四舍五入

/**
 * 四舍五入,保留指定小数位数,当原始数据不满足长度时,不要补 0
 * @param number [Number | String] 原始数据,支持字符串和数值型
 * @param i [Number] 保留的小数个数 >= 0
 * @returns [Number] 转换后的数据
 */
function transformDecimal(number, i) {
 let decimalNum = null
 // 先转换为数值型
 let num = Number(number)
 // 判断是否为数值型
 if (!isNaN(num)) {
  // 切分整数与小数
  let arr = num.toString().split('.')
  // 是小数且小数位大于保留个数
  if (arr.length > 1 && arr[1].length > i) {
   // 小数部分字符串
   let decimal = arr[1].slice(i, i + 1)
   // toFixed 有 bug,四舍六入五随机
   // 当四舍五入的数为 5,给其 + 1
   if (decimal === '5') {
    // 这里可能会存在 0.1 ** 5 = 0.000010000000000000003 但不影响四舍五入
    num += Math.pow(0.1, i + 1)
   }
   decimalNum = num.toFixed(i)
  } else {
   decimalNum = num
  }
  decimalNum = Number(decimalNum)
 }
 return decimalNum
}

export default transformDecimal
用法:
import transformDecimal from 'xxx'
console.log(transformDecimal(100.123456, 3)) // 100.123

抄别人的,写博客上是为了好找到,原地址:https://blog.csdn.net/sinat_31213021/article/details/113354500

posted @ 2022-08-10 14:39  yw3692582  阅读(103)  评论(0)    收藏  举报