『Java 語法基礎』3 * 0.1 == 0.3 將會返回什麼?true 還是 false?

BNTang發表於2024-03-18

false,因為有些浮點數不能完全精確的表示出來。

由於浮點數在計算機中的表示通常是近似值,3 * 0.1 實際上可能不會精確等於 0.3。這是因為二進位制浮點數最為常用的表示格式(IEEE 754)通常無法精確表示一些十進位制數。執行 3 * 0.1 == 0.3 在 Java 中很可能會返回 false,因為兩邊計算得到的二進位制表示有細微的差異。為了準確的比較浮點數,通常應該使用一個非常小的誤差值來確定兩個浮點數是否 “相等”。例如:

double a = 3 * 0.1;
double b = 0.3;
double epsilon = 0.0001; // 定義一個很小的誤差範圍
boolean areEqual = Math.abs(a - b) < epsilon; // 比較是否在誤差範圍內相等

輸出結果:

true

在操作金融計算等對精度要求非常高的場合,應避免使用 floatdouble 型別,而是使用 BigDecimal 類。

完整程式碼可在此查閱:GitHub

相關文章