美文网首页
js部分数字四舍五入不符合预期值

js部分数字四舍五入不符合预期值

作者: 就叫basi | 来源:发表于2020-05-20 11:23 被阅读0次

前几天测试提出来一个bug,部分数字四舍五入不对。比如1.555,4.555,5.555,6.555,7.555,8.555,9.555四舍五入进位有误。

我在前端使用的是.toFixed()方法来保留两位小数,问题出在.toFixed()方法精确小数时的算法使用的是“银行家舍入法”,即4舍6入,当时我就想,wtf😒😒😒,啥时候出来的这么个舍入法。

银行家舍入法是由IEEE 754标准规定的浮点数取整算法(哦)

银行家舍入法的原则是:

四舍六入五考虑,五后非零就进一,
五后为零看奇偶,五前为偶应舍去,五前为奇要进一

所以1.555.toFixed(2) = 1.55 ...

解决这个问题的方法,使用Math的round()函数

//保留两位小数
round(num) {
        if (isNaN(num)) return 0.00;
        return  ( Math.round(num * 100) / 100).toFixed(2);//这里的.toFixed()方法作用仅是保留两位小数
 }

这种算法应该更适合银行里的业务行为吧,一分一厘也要算清楚。
感觉收款时用四舍五入比较好,付款时用银行家舍入好,😂😂😂

vans.png

相关文章

网友评论

      本文标题:js部分数字四舍五入不符合预期值

      本文链接:https://www.haomeiwen.com/subject/bujgohtx.html