Java中的浮點型和雙浮點型都是用于表示小數的數據類型。浮點型使用float關鍵字聲明,雙浮點型使用double關鍵字聲明。相對于整型,浮點型和雙浮點型可以表示更大或更小的數值,但是犧牲了精度。
float f = 3.1415926f; double d = 3.14159265358979323846;
浮點型的精度約為6-7位有效數字,而雙浮點型精度則約為15-16位有效數字。基于這個原因,在編程中我們需要注意使用這些類型時可能帶來的精度問題。
float f1 = 0.1f; float f2 = 0.2f; System.out.println(f1 + f2); // 輸出 0.30000000000000004 double d1 = 0.1; double d2 = 0.2; System.out.println(d1 + d2); // 輸出 0.3
由于浮點型的精度問題,使用float和double類型時需要特別注意比較操作符的使用,因為由于精度問題,兩個看起來一樣的變量其實可能不相等。
float f1 = 1.000001f; float f2 = 1.000002f; boolean equal = Math.abs(f1 - f2)< 0.000001; System.out.println(equal); // 輸出 true
在涉及到用于貨幣計算等精度要求較高的場景時,不建議使用浮點型和雙浮點型,可以考慮使用BigDecimal類型或者對于貨幣計算等工作,建議使用整型配合計算,如將貨幣數值擴大10^6倍,轉為整型進行計算,最后再縮小10^6倍。