關於js開發中保留小數位計算函數(以向上取整或向下取整的方式保留小數)
阿新 • • 發佈:2019-03-08
判斷 開發 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開發中保留小數位計算函數(以向上取整或向下取整的方式保留小數)