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

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

判斷 開發 func 小數 前端 直接 小數位數 rst 使用

前端工作中經常遇到數字計算保留小數問題,由於不是四舍五入的方式不能使用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
}

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

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

如發現問題,歡迎指教

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