當我們在電腦中使用浮點數進行計算時,特別是在使用二進位表示浮點數時,可能會出現舍入誤差。這是由於電腦使用有限的位數來表示浮點數,而某些十進位數無法精確地表示為有限的二進位數。 0.1 和 0.2 都是無限迴圈的二進位數,在轉換為浮點數時並不能完全準確地表示。將它們相加時,可能會出現舍入誤差。因此 ...
當我們在電腦中使用浮點數進行計算時,特別是在使用二進位表示浮點數時,可能會出現舍入誤差。這是由於電腦使用有限的位數來表示浮點數,而某些十進位數無法精確地表示為有限的二進位數。
0.1 和 0.2 都是無限迴圈的二進位數,在轉換為浮點數時並不能完全準確地表示。將它們相加時,可能會出現舍入誤差。因此,0.1 + 0.2 在 JavaScript 中的結果並不等於 0.3。
這是因為 0.1 在二進位中是一個無限迴圈的數,大約是 0.0001100110011001100110011001100110011001100110011...,而 0.2 在二進位中也是一個無限迴圈的數,大約是 0.001100110011001100110011001100110011001100110011...。當電腦在進行浮點數運算時,只能存儲有限的位數,因此會發生舍入誤差。
當需要在 JavaScript 中進行精確的十進位計算時,一種常見的方法是將數字轉換為整數進行計算,然後再將結果轉換回十進位。這可以通過乘以一個適當的倍數來實現。以下是一個例子:
// 將數字轉換為整數進行計算
const num1 = 0.1;
const num2 = 0.2;
const multipliedNum1 = num1 * 10;
const multipliedNum2 = num2 * 10;
const sum = multipliedNum1 + multipliedNum2;
// 將結果轉換回十進位
const result = sum / 10;
console.log(result); // 0.3
在這個例子中,我們將 0.1 和 0.2 分別乘以 10,得到整數 1 和 2。然後我們對這兩個整數進行求和,得到整數 3。最後,我們將整數 3 除以 10,將結果轉換回十進位,得到 0.3。
除了將數字轉換為整數進行計算的方法,使用內置的`toFixed()` 方法可以用於將浮點數四捨五入為指定小數位數的字元串表示。例如:
const num1 = 0.1;
const num2 = 0.2;
const sum = num1 + num2;
const result = sum.toFixed(1);
console.log(result); // 0.3
這種方法適用於簡單的加法、減法和乘法運算,畢竟數據進行了取捨,結果可能會有偏差。
另外,一些 JavaScript 庫也提供了精確計算的功能,例如 BigNumber.js,這裡就不展開介紹了。