Javascript初學筆記7 浮點數處理(toFixed & toPrecision)

之前記錄过JS如何處理整數的部分(ceil,floor,round),今天則是記錄一下浮點數(float)的處理方式。起因是因為在AC的實作練習中有練習到計算機的寫法,為了增加完成度便打算增加處理無窮小數的函數,結果發現一些很有趣的陷阱。
在JS &Java中處理小數會有浮點數精度的問題,也就是說你會發現0.1+0.2不會是0.3,而是回傳0.300000000000000004之類的東西,為什麼呢?

細部原因我暫時不探究,簡單來說就是因為電腦都是採用二進位運算,在轉為十進位的顯示時會出現一些精度的問題,而處理方式有很多種,除了利用函數封裝之外,我這次想記錄的是toFixed & toPrecision 這兩種常見的處理方式。

兩種方法都需要一個變數決定小數點後幾位數,若不輸入變數則回傳0,
我們看一下以下的例子。

x = 0.1+0.2
console.log(x)// 0.30000000000000004
console.log(x.toFixed(1)) // 0.3
console.log(x.toPrecision(1)) //0.3

若光是看以上的例子根本看不出兩者的差別,原因在於toFixed決定的是小數點後的位數,而 toPrecision 則是決定總長度,換成以下的例子就可以輕易看出差別,挺有意思的。

 
x = 1.1+0.2
console.log(x)// 1.3
console.log(x.toFixed(2)) //1.30
console.log(x.toPrecision(2)) //1.3

發表留言