该方法支持精准四舍五入(解决了toFixed方法bug)及准确截取小数位数
一、某些时候toFixed()不能准确的四舍五入如下(1.355)
let num = 1.355 let num2 = 1.3551 let num3 = 1.33 let num4 = 1.36 let num5 = 1 console.log(num.toFixed(2)) // 1.35 console.log(num2.toFixed(2)) // 1.36 console.log(num3.toFixed(2)) // 1.33 console.log(num4.toFixed(2)) // 1.36 console.log(num5.toFixed(2)) // 1.00
二、截取小数位数(准确四舍五入及直接截取)
/** *保留小数位数(支持四舍五入及直接截取) * @export * @params {number} num 需要格式化的数字 * @params {number} n 小数位数 * @params {boolean} round 是否需要四舍五入 * @return {string} */ function toFixedDigit(num, n, round) { if (typeof num != 'number') { return false } if (n <= 0) { return num | 0 } num = num.toString() let result = '' let zeroResult = function (n) { let zero = '' for (let i = 0; i < n; i++) { zero += '0' } return zero } let toFixedQ = function (num, n) { let flag = 1 if (num < 0) { flag = -1 num *= -1 } num = Math.round(num * Math.pow(10, n)) / Math.pow(10, n) + Math.pow(10, -(n + 1)) return (flag * num).toFixed(n) } if (num % 1 == 0) { result = num + '.' + zeroResult(n) } else { let num1 = num.split('.'); if (num1[1].length < n) { result = num1[0] + '.' + num1[1] + zeroResult(n - num1[1].length) } else { if (round) { result = toFixedQ(num, n) } else { result = num1[0] + '.' + num1[1].substring(0, n) } } } return result }
2.1 四舍五入
console.log(toFixedDigit(0,2,true)) // 0.00 console.log(toFixedDigit(1.355,2,true)) // 1.36 console.log(toFixedDigit(1.3551,2,true)) // 1.36 console.log(toFixedDigit(1.344,2,true)) // 1.34 console.log(toFixedDigit(1.366,2,true)) // 1.36 console.log(toFixedDigit(1.4561,2,true)) // 1.46 console.log(toFixedDigit(1.623,2,true)) // 1.62
2.2 直接截取
console.log(toFixedDigit(1,2)) // 1.00 console.log(toFixedDigit(1.35,2)) // 1.35 console.log(toFixedDigit(1.352,2)) // 1.35 console.log(toFixedDigit(1.346,2)) // 1.34 console.log(toFixedDigit(1.363,2)) // 1.36 console.log(toFixedDigit(1.4561,2)) // 1.45 console.log(toFixedDigit(1.623,2)) // 1.62