【JS】【JS】关于toFixed与银行家舍入法
了解到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"
有人知情吗?求教
(额,这个问题可能有点孔乙己了-_-||)
回答
……不知道是打哪看来的,有的话建议标明下出处,避免其他人再次入坑。
我觉得MDN的toFixed中文词条页这里就翻译的挺好:
toFixed() 方法使用定点表示法来格式化一个数。
因为这个“Fixed”就是“fixed-point”的意思,所以,这就是个二进制浮点数转换定点数时精度丢失的问题,你看到的进位,实际上是浮点数在二进制-十进制转换中的一种必然损耗,网上有个在线数制转换,你可以去试试(当然我更推荐你了解下整数、定点数和浮点数,以及它们之间的数制转换,手写一遍就明白了)。
补充一篇文章供参考:
经 蒲柳隐逸 提点,怀疑是浮点数丢失问题
做了如下的实验:
(0.45).toFixed(20)"0.45000000000000001110"
以上是 【JS】【JS】关于toFixed与银行家舍入法 的全部内容, 来源链接: utcz.com/a/87561.html