为了账号安全,请及时绑定邮箱和手机立即绑定

【JS】关于toFixed与银行家舍入法

【JS】关于toFixed与银行家舍入法

临摹微笑 2019-03-20 22:15:01
了解到JavaScript的toFixed方法的四舍五入规则是 银行家舍入法即:四舍六入五考虑,五后非零就进一,五后为零看奇偶,五前为偶应舍去,五前为奇要进一11.556 = 11.56 ------六入11.554 = 11.55 -----四舍11.5551 = 11.56 -----五后有数进位11.545 = 11.54 -----五后无数,若前位为偶数应舍去11.555 = 11.56 -----五后无数,若前位为奇数应进位所以在我理解看来 (0.45).toFixed(1) 的结果应该是0.4,即 五后无数,若前位为偶数应舍去然鹅(0.075).toFixed(2)"0.07"(0.085).toFixed(2)"0.09"(0.045).toFixed(2)"0.04"有人知情吗?求教(额,这个问题可能有点孔乙己了-_-||)
查看完整描述

2 回答

?
偶然的你

TA贡献1841条经验 获得超3个赞

……不知道是打哪看来的,有的话建议标明下出处,避免其他人再次入坑。

我觉得MDN的toFixed中文词条页这里就翻译的挺好:

toFixed() 方法使用定点表示法来格式化一个数。

因为这个“Fixed”就是“fixed-point”的意思,所以,这就是个二进制浮点数转换定点数时精度丢失的问题,你看到的进位,实际上是浮点数在二进制-十进制转换中的一种必然损耗,网上有个在线数制转换,你可以去试试(当然我更推荐你了解下整数、定点数和浮点数,以及它们之间的数制转换,手写一遍就明白了)。


补充一篇文章供参考:

为什么(2.55).toFixed(1)等于2.5?


查看完整回答
反对 回复 2019-04-04
?
慕虎7371278

TA贡献1802条经验 获得超4个赞

经 蒲柳隐逸 提点,怀疑是浮点数丢失问题


做了如下的实验:


(0.45).toFixed(20)

"0.45000000000000001110"


查看完整回答
反对 回复 2019-04-04
  • 2 回答
  • 0 关注
  • 773 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信