JS浮點運算問題

Javascript在小數點的運算上,常常會出現無限小數的情況,這是因為Javascript依照IEEE754浮點數運算標準,因此在做運算時,會先把十進制轉成二進制,然而小數點在轉換到二進制時,會出現無限小數,例如:

// 將十進制的 0.1 轉為二進制
Number(0.1).toString(2) // '0.0001100110011001100110011001100110011001100110011001101'

因此在做 0.1 + 0.2 這樣的運算時,才會產生 0.30000000000000004 這樣的結果。遇到這個情況時,我們可以用 toFixed() 來解決。 number.toFixed(n) 會回傳一個 n 位內小數點的「五捨六入」的「字串」,n可為0-20,預設值為0,例如:

0.12366.toFixed(4) // '0.1237'
(0.1 + 0.3).toFixed(4) // '0.4000'

然後,因為輸出的是字串,我們可以再以 parseFloat() 轉回數字。例如:

parseFloat(0.12366.toFixed(4)) // 0.1237
parseFloat((0.1 + 0.3).toFixed(4)) // 0.4

Javascript 常用數字與日期顯示格式

這篇主要是筆記一下幾個常用,卻又容易忘記的處理數字與日期格式的方式。

數字千位分隔符

以往(查了一下caniuse應該是2017, 2018,瀏覽器還不支援Intl以前)要在數字上加上分隔用的逗點(如:19,890,604)只能自己手工處理。例如下面這樣的方式:

閱讀全文 Javascript 常用數字與日期顯示格式

搞懂 JavaScript的Object.freeze, Object.seal, Object.preventExtensions 到底在幹嘛

簡單來說,這三個Object的methods都是用來「鎖定」物件,讓物件無法被修改或刪除屬性(props),但各自有不同的影響範疇:

可新增屬性可刪除屬性可修改屬性
preventExtensions
seal
freeze
閱讀全文 搞懂 JavaScript的Object.freeze, Object.seal, Object.preventExtensions 到底在幹嘛