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


    该方法支持精准四舍五入(解决了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
  • 相关阅读:
    应用程序是否能控制SDK的P2P连接?
    如何使用流媒体数据代理功能?
    怎么样设置AnyChat视频质量?
    AnyChat在打开音频设备的同时会自动发布视频数据吗?
    单层感知器--matlab神经网络
    Django Day1
    云知声Java实习面试(offer到手含面试经验及答案)
    第四范式Java实习面试(offer到手含面试经验及答案)
    悦畅科技Java实习面试(offer到手含面试经验及答案)
    花椒直播Java实习面试(offer到手含面试经验及答案)
  • 原文地址:https://www.cnblogs.com/shy0113/p/14718545.html
Copyright © 2020-2023  润新知