微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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.jb51.cc/js/154916.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐