鍍金池/ 問答/HTML/ 【JS】關于toFixed與銀行家舍入法

【JS】關于toFixed與銀行家舍入法

了解到JavaScript的toFixed方法的四舍五入規(guī)則是 銀行家舍入法

即:

四舍六入五考慮,五后非零就進一,五后為零看奇偶,五前為偶應舍去,五前為奇要進一
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,即 五后無數,若前位為偶數應舍去

然鵝

clipboard.png

(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?

2018年3月7日 00:07
編輯回答
擱淺

蒲柳隱逸 提點,懷疑是浮點數丟失問題

做了如下的實驗:

(0.45).toFixed(20)
"0.45000000000000001110"
2017年8月31日 10:19