js-正負數保留小數點特定位數

seekHelp發表於2024-03-13
        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
            }
        }

相關文章