个人对于JavaScript中Number.toFixed()方法的理解

需求:对浮点数进行四舍五入精度获取。

问题:直接使用Number.toFixed()会出现异常的舍入情况。

原因:计算机浮点数存储是二进制,jsNumber.toFixed()实际的精度确认规则是四舍六入五成双,逢四下舍,逢六入一,逢五时,根据浏览器内核计算结果也不尽相同。

具体原理这里不做详细描述,各位看官可自行查阅相关资料。

解决方法:重新Number.toFixed()方法。

实现原理:将浮点数转化为整数,保留所需位数,再转为浮点数。

实现代码:

Number.prototype.toFixed = function (length) {
    var s = this + '';
    var len = length || 0;
    var result = s;
    var arr = s.split('.');

    //整数
    if (arr.length < 2) {//前端全栈交流学习圈:866109386
        if (len > 0) { //面向1-3年经验的前端开发人员
            result += '.';//帮助突破技术瓶颈,提升思维能力
            for (var i = 1; i <= len; i++) {
                result += '0';
            }
        }
        return result;
    }

    //小数
    var first = arr[0];
    var second = arr[1];

    //小数点位数等于length
    if (second.length == len) {
        return result;
    }

    //小数点位数小于length
    if (second.length < len) {
        for (var k = 1; k <= len - second.length; k++) {
            result += '0';
        }
        return result;
    }

    //小数点位数大于length
    result = first + second.substr(0, len + 1);
    var last = Math.floor((result * 1 + 5) / 10);
    result = (last / Math.pow(10, len)).toFixed(len);
    return result;
};

备注:解决方案有很多种,这只是个人的理解,仅供参考。

猜你喜欢

转载自blog.csdn.net/q3254421/article/details/83420954