javascript四舍五入算法Bug修复

网上找的或多或少会有bug,经过调整修复以后真正满足生产环境如下:

function newToFixed(num,digit) {//digit:保留小数位
        let str = (num*Math.pow(10, digit)).toString();
        if (str.indexOf('.') == -1) {//数字本身是整数的情况
            str += ".";
            for (var i = 1; i <= digit; i++) {
                str += "0";
            }
        }
        var dotIndex = str.indexOf('.');
        if (parseInt(str.substr(dotIndex + 1, 1)) >= 5) {
            if (parseInt(str.substring(str.indexOf('.') - 1, str.indexOf('.'))) != 9) {
                str = str.substring(0, dotIndex - 1) + parseFloat(parseInt(str.substr(str.indexOf('.') - 1, 1)) + 1);
            } else {
                var i = 1;
                var dotValue = parseInt(str.substr(str.indexOf('.') - i, 1));
                while (dotValue == 9) {
                    i++;
                    dotValue = parseInt(str.substr(str.indexOf('.') - i, 1));
                }
                if (str.substring(0, dotIndex - i + 1) != "") {
                    str = str.substring(0, dotIndex - i) + parseFloat(parseInt(str.substr(dotIndex - i, 1)) + 1);
                    var num = dotIndex - str.length;
                    if (num > 0) {
                        for (var j = 0; j < num; j++) {
                            str += "0";
                        }
                    }
                } else {
                    str = 1;
                    for (var j = 0; j < dotIndex; j++) {
                        str += "0";
                    }
                }
            }
        } else {
            var value = parseInt(str.substr(dotIndex + 1, 1));
            if (value == 0) {
                str = str.substring(0, str.indexOf('.') + 1) + "0";
            } else {
                str = str.substring(0, str.indexOf('.'));
            }
        }
        return parseFloat(str) / Math.pow(10, digit);
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值