javascript – 破解到固定的实现

前端之家收集整理的这篇文章主要介绍了javascript – 破解到固定的实现前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
javascript的“Number.toFixed”的默认实现似乎有点破碎.
console.log((8.555).toFixed(2));    // returns 8.56
console.log((8.565).toFixed(2));    // returns 8.57
console.log((8.575).toFixed(2));    // returns 8.57
console.log((8.585).toFixed(2));    // returns 8.59

我需要一种比这更一致的舍入方法.

在8.500和8.660之间的范围内,以下数字不能正确舍入.

8.575
8.635
8.645
8.655

我已经尝试按如下方式修复原型实现,但它只有一半.任何人都可以建议任何可以使其更一致地工作的变化吗?

Number.prototype.toFixed = function(decimalPlaces) {
    var factor = Math.pow(10,decimalPlaces || 0);
    var v = (Math.round(this * factor) / factor).toString();
    if (v.indexOf('.') >= 0) {
        return v + factor.toString().substr(v.length - v.indexOf('.'));
    }
    return v + '.' + factor.toString().substr(1);
};

解决方法

这是因为浮点错误.

比较(8.575).toFixed(20)和(8.575).toFixed(3)并想象这个命题:8.575< real(“8.575”),其中real是一个虚构函数,可以创建具有无限精度的实数. 也就是说,原始数字不符合预期,并且已经引入了不准确性. 我能想到的一个快速的“工作原理”是:乘以1000(或适当的话),得到它的toFixed(0)(仍然有一个限制,但它是荒谬的),然后以十进制形式推回. 快乐的编码.

原文链接:https://www.f2er.com/js/154916.html

猜你在找的JavaScript相关文章