浮點型數據實際上在內存中存儲的時候大部分情況下都是存儲了數據的近似值,為什么呢?這是因為在現實世界中存在無窮的數據,例如:3.333333333333333333..,數據是無窮的,但是內存是有限的,所以只能存儲近似值,float單精度占4個字節,double雙精度占8個字節,相對來說double精度要高一些。由于浮點型數據存儲的是近似值,所以一般判斷兩個浮點型數據是否相等的操作很少。
在java語言中有這樣的一條規定:只要是浮點型的字面量,例如1.0、3.14等默認會被當做double類型來處理,如果想讓程序將其當做float類型來處理,需要在字面量后面添加f/F。請看以下代碼:
public class DoubleTest {
public static void main(String[] args) {
float f = 3.0;
}
}
編譯報錯了:
圖4-14:編譯錯誤提示信息
為什么會編譯報錯呢?那是因為3.0默認被當做double類型來處理,占用8個字節,前面的f變量是float類型占用4個字節,大容量無法直接賦值給小容量。怎么修改呢?請看代碼:
public class DoubleTest {
public static void main(String[] args) {
//float f = 3.0;
//第一種方案
float f = 3.0F;
System.out.println("f = " + f);
//第二種方案
float f1 = (float)3.0;
System.out.println("f1 = " + f1);
}
}
運行結果如下圖所示:
圖4-15:運行結果
以上程序的第一種方案在3.0后面添加了F,3.0F被當做float類型來處理。第二種方案是進行了強制類型轉換,第二種方案可能會存在精度損失。