截取小数位数(准确四舍五入及直接截取)
该方法支持精准四舍五入(解决了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