zoukankan      html  css  js  c++  java
  • 截取小数位数(准确四舍五入及直接截取)

    该方法支持精准四舍五入(解决了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
  • 相关阅读:
    xml 转义特殊字符
    MySql按周,按月,按日分组统计数据
    js jquery 动态添加表格
    详解Oracle partition分区表
    DBMS_NETWORK_ACL_ADMIN (OCP 053 第七题)
    RMAN 的优缺点及RMAN 备份及恢复步骤
    完美解决xhost +报错: unable to open display "" 装oracle的时候总是在弹出安装界面的时候出错
    Linux系统(X64)7 安装Oracle11g完整安装图文教程另附基本操作
    11g新特性-SQL Plan Management
    Oracle中事务处理控制用法
  • 原文地址:https://www.cnblogs.com/shy0113/p/14718545.html
Copyright © 2011-2022 走看看