截取小数位数(准确四舍五入及直接截取)

该方法支持精准四舍五入(解决了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

 

posted @ 2021-04-29 16:32  SHY13  阅读(629)  评论(0编辑  收藏  举报