1. 程式人生 > 其它 >浮點型資料

浮點型資料

/*
關於java語言中的浮點型資料
浮點型包括:
float 4個位元組
double 8個位元組

float是單精度
double是雙精度

double更精確

比如說:
10.0 / 3 如果採用float來儲存的話結果可能是:3.33333
10.0 / 3 如果採用double來儲存的話結果可能是:3.33333333333333

但是需要注意的是:如果用在銀行方面或者說使用在財務方面,double
也是遠遠不夠的,在java中提供了一種精度更高的型別,這種型別專門
使用在財務軟體方面:java.math.BigDecimal (不是基本資料型別,屬於
引用資料型別。)

float和double儲存資料的時候都是儲存的近似值。
為什麼?
因為現實世界中有這種無限迴圈的資料 例如:1/3
資料實際上是無限迴圈,但是計算機的記憶體有限,用一個有限的資源
表示無限的資料,只能儲存近似值。

long型別佔用8個位元組
float型別佔用4個位元組
哪個容量大?
注意:任意一個浮點型都比整數型空間大。
float容量 > long容量

java中規定,任何一個浮點型資料預設被當做double來處理。
如果想讓這個浮點型字面量被當做float型別來處理,那麼
請在字面量後面新增F/f
1.0 那麼1.0預設被當做double型別處理
1.0 這才是float型別。(1.0f)

*/

public class F
{
  public static void main(String[] args)
  {
    // 這個不存在型別轉換
    // 3.1415926是double型別
    // p1是double型別
    double p1 = 3.1415926;
    System.out.println(p1);

    // 這個可以嗎?
    // 錯誤:不相容的型別:從double轉換到float可能會有損失。
    // float f = 3.14;

    // 怎麼修改以上的程式碼呢?
    // 第一種方式:在字面量後面新增F/f
    //float f = 3.14f;
    //float f = 3.14F;

    // 第二種方式:強制型別轉換,但可能損失精度,謹慎使用。
    float f = (float)3.14;
    System.out.println(f);

    // 分析這個程式,可以編譯通過嗎?
    // 錯誤:不相容的型別從double轉換到int可能會有損失。
    // 原理:先將5轉換成double型別。然後再做運算,結果是double
    // 大容量無法直接賦值給小容量,需要強轉。
    // int i = 10.0 / 5;

    // 怎麼修改
    int i = (int)10.0 / 5;
    System.out.println(i); // 2

    // 可以這樣修改嗎?
    int x = (int)(10.0 / 5);
    System.out.println(x); // 2

  }
}