關於js開發中保留小數位計算函數(以向上取整或向下取整的方式保留小數)


前端工作中經常遇到數字計算保留小數問題,由於不是四舍五入的方式不能使用toFixed函數,本文采用正則表達式匹配字符串的方式,解決對數字的向上或向下保留小數問題:

1、向上保留小數(只要目標小數位后有有效數字就進1,保證計算后的數值一定不小於原數值)

function upFixed (num, fix) {
  // num為原數字,fix是保留的小數位數
  let result = '0'
  if (Number(num) && fix > 0) { // 簡單的做個判斷
    fix = +fix || 2
    num = num + ''
    if (/e/.test(num)) { // 如果是包含e字符的數字直接返回
      result = num
    } else if (!/\./.test(num)) { // 如果沒有小數點
      result = num + `.${Array(fix + 1).join('0')}`
    } else { // 如果有小數點
      num = num + `${Array(fix + 1).join('0')}`
      let reg = new RegExp(`-?\\d*\\.\\d{0,${fix}}`)
      let floorStr = reg.exec(num)[0]
      if (+floorStr >= +num) {
        result = floorStr
      } else {
        let floorNumber = +floorStr + +`0.${Array(fix).join('0')}1`
        let point = /\./.test(floorNumber + '') ? '' : '.'
        let floorStr2 = floorNumber + point + `${Array(fix + 1).join('0')}`
        result = reg.exec(floorStr2)[0]
      }
    }
  }
  return result
}

2、向下保留小數(目標小數位后的數字直接舍棄,保證計算后的數值一定不大於原數值)

function downFixed (num, fix) {
  // num為原數字,fix是保留的小數位數
  let result = '0'
  if (Number(num) && fix > 0) { // 簡單的做個判斷
    fix = +fix || 2
    num = num + ''
    if (/e/.test(num)) { // 如果是包含e字符的數字直接返回
      result = num
    } else if (!/\./.test(num)) { // 如果沒有小數點
      result = num + `.${Array(fix + 1).join('0')}`
    } else { // 如果有小數點
      num = num + `${Array(fix + 1).join('0')}`
      let reg = new RegExp(`-?\\d*.\\d{0,${fix}}`)
      result = reg.exec(num)[0]
    }
  }
  return result
}

注:本方法對采用科學計數法的數字不做處理直接返回

另:兩個函數十分類似,根據自己需求合並優化即可

如發現問題,歡迎指教


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM