【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,即 五后无数,若前位为偶数应舍去

然鹅

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

(0.075).toFixed(2)
"0.07"
(0.085).toFixed(2)
"0.09"
(0.045).toFixed(2)
"0.04"

有人知情吗?求教

(额,这个问题可能有点孔乙己了-_-||)

回答

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

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

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

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


补充一篇文章供参考:

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

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

做了如下的实验:

(0.45).toFixed(20)

"0.45000000000000001110"

以上是 【JS】【JS】关于toFixed与银行家舍入法 的全部内容, 来源链接: utcz.com/a/87561.html

回到顶部