帶小數的數據在Java中稱爲浮點型,浮點型可以分爲float類型和double類型。
類型 |
佔用存儲空間 |
表數範圍 |
float |
4字節 |
-3.403E38~3.403E38 |
double |
8字節 |
-1.798E308~1.798E308 |
float類型又被稱爲單精度類型,尾數可以精確到7位有效數字,在很多情況下float類型的精度很難滿足需求。而double表示這種類型的數值約是float類型的兩倍,又被稱作雙精度類型,絕大部分應用程序都採用double類型。浮點類型常量默認類型也是double。
Java浮點類型常量的兩種表現形式
- 十進制數形式,例如:3.14 314.0 0.314
- 科學記數法形式,如:314e2 314E2 314E-2
上面的科學記數法形式,e2表示10的2次方,也就是314乘10的2次方。而E-2表示10的-2次方,即314乘10的-2次方。
使用科學記數法個浮點型變量賦值
double f1=314e2; //314*10^2 --> 31400.0
double f2=314e-2; //314*10^(-2) --> 3.14
float f3=3.3f;
float類型的數值有一個後綴F或者f,如果沒有的話,則默認爲double類型,也可以在浮點數值後面直接添加D或者d,以明確其爲double類型。同時注意,爲float類型數據賦值時,要加上後綴F或者f 。
浮點數不要用於比較
float a1=0.1f;
double a2=1.0/10;
System.out.println(a1==a2); //輸出結果爲false
float a1=0.1f;
double a2=1.0/10;
System.out.println(a1==a2); //輸出結果爲false
浮點數是不精確的,因此一點不要用於比較!
使用BigDecimal進行浮點數的比較
浮點類型float,double的數據不適合在不容許舍入誤差的金融計算領域。如果需要進行不產生誤差的精確數字計算,需要使用BigDecimal類。
在java.math包下面的兩個有用的類:BigInteger和BigDecimal,這兩個類可以處理任意長度的數值。BigInteger實現了任意精度的整數運算。BigDecimal實現了任意精度的浮點數運算。