js-正负数保留小数点特定位数

        function round(num, iCount) {
            // iCount 保留几位小数
            let changeNum = num
            let zs = true
            // 判断是否是负数
            if (changeNum < 0) {
                changeNum = Math.abs(changeNum)
                zs = false
            }
            const iB = Math.pow(10, iCount)
            // 有时乘100结果也不精确
            const value1 = changeNum * iB
            let intDecSet = []
            let intDecHun = []

            let fValue = value1
            const value2 = value1.toString()
            const iDot = value2.indexOf('.')

            // 如果是小数
            if (iDot !== -1) {
                intDecSet = changeNum.toString().split('.')

                // 如果是科学计数法结果
                if (intDecSet[1].indexOf('e') !== -1) {
                    return Math.round(value1) / iB
                }
                intDecHun = value2.split('.')

                if (intDecSet[1].length <= iCount) {
                    return parseFloat(num, 10)
                }

                const fValue3 = parseInt(intDecSet[1].substring(iCount, iCount + 1), 10)

                if (fValue3 >= 5) {
                    fValue = parseInt(intDecHun[0], 10) + 1
                } else {
                    // 对于传入的形如111.834999999998 的处理(传入的计算结果就是错误的,应为111.835)
                    if (fValue3 === 4 && intDecSet[1].length > 10 && parseInt(intDecSet[1].substring(iCount + 1, iCount + 2), 10) === 9) {
                        fValue = parseInt(intDecHun[0], 10) + 1
                    } else {
                        fValue = parseInt(intDecHun[0], 10)
                    }
                }
            }
            // 如果是负数就用0减四舍五入的绝对值
            let val = zs ? (fValue / iB) : (0 - fValue / iB)

            const d = val.toString().split('.')
            if (d.length === 1) {
                return val.toString() + '.00'
            }
            if (d.length > 1) {
                if (d[1].length < 2) {
                    val = val.toString() + '0'
                }
                return val
            }
        }
posted @ 2024-03-13 17:38  seekHelp  阅读(8)  评论(0编辑  收藏  举报