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
在操作金融計算等對精度要求非常高的場合,應避免使用 float
和 double
型別,而是使用 BigDecimal
類。
完整程式碼可在此查閱:GitHub