js中的toFixed保留小数位的功能优化

线看效果:

1.1.toFixed(2);// 1.10

保留了一个无效的0位,有时候为了数据整齐化,有必要加上这个0。如果不想要呢?toFixed有办法解决吗?

比如:保留两位小数

1.001; // 我想要1,而不是1.00

这种情况toFixed是做不到的

搜索了一下,暂时没有发现有这样的方法,哪位朋友找到@我一下。
自己实现了一个解决这个问题的方法:

Number.prototype.toFixedNo = function(fixed) {
    var num = this;
    // 默认保留小数
    var fixed = fixed || 0;
    // 如果fixed不是数字,直接返回
    if (isNaN(fixed)) {
        return num.toString();
    } else {
        var numStr = num.toString();
        // 如果num不是小数,返回
        if (numStr.indexOf('.') < 0 || numStr.indexOf('.') == numStr.length - 1) {
            return parseInt(num);
        } else if (fixed == 0) {
            var arr = numStr.split('.');
            var integer = arr[0];
            var decimals = arr[1];
            if (parseInt(decimals) != 0) {
                if (decimals.substr(0, 1) >= 5) {
                    integer = parseInt(integer) + 1;
                }
            }
            return integer;
        } else {
            var arr = numStr.split('.');
            var integer = arr[0];
            var decimals = arr[1];

            if (fixed < decimals.length) {
                var fixedNo = decimals.substr(0, fixed);
                //  判断保留位的下一位是否大于5,四舍五入
                if (decimals.substr(fixed, 1) >= 5) {
                    fixedNo = parseInt(fixedNo) + 1;
                } else {
                    if (parseInt(fixedNo) == 0) {
                        return integer;
                    }
                    // 移除多余的0
                    fixedNo = fixedNo.replace(/0+$/, '');
                }
                decimals = fixedNo;
            }
            return integer + '.' + decimals;
        }
    }
}

test:

1.04.toFixedNo(1);//1,
1.05.toFixedNo(1);//1.1
1.04.toFixedNo();//1
1.5.toFixedNo();//2
相关文章

相关标签/搜索