C語言中的浮點數據類型

浮點數據類型

1. 處理帶小數的數值

  我們來討論一下類似於1.234567,0.00001,這類非整數的數據。我們先試試看,int能不能裝這些數據呢?

#include <stdio.h>
int main()
{
    int a = 1.234567;
    int b = 0.00001;
    int c = 365.12345;
    printf("%d\n", a);
    printf("%d\n", b);
    printf("%d\n", c);
    return 0;
}

在這裏插入圖片描述
  好像不太行,小數部分都丟失了。那怎麼辦呢?我們需要引入新的類型了。

2. 浮點類型

  我們把上面的代碼中int,用float替代。

  printf("%d\n",a);中的佔位符%d,我們知道%d是用於整數的,因此%d肯定是不行的。所以我們用%f替換。

#include <stdio.h>
int main()
{
    float a = 1.234567;
    float b = 0.00001;
    float c = 365.12345;
    printf("%f\n", a);
    printf("%f\n", b);
    printf("%f\n", c);
    return 0;
}

float

  這時我們發現,大部分的數據都對了,但是365.12345變成了365.123444。是的,浮點數不能表示無限的精確,它有一定的誤差。並且注意,這個誤差並不是四捨五入的。

  C標準規定,float類型必須至少能表示6位有效數字,並且取值範圍至少是10^-37~10+37。

  那有沒有精度更高的float類型呢?有的,叫做雙精度浮點型,double。我們把上面的代碼中的float換成double,%f依然不變。

#include <stdio.h>
int main()
{
    double a = 1.234567;
    double b = 0.00001;
    double c = 365.12345;
    printf("%f\n", a);
    printf("%f\n", b);
    printf("%f\n", c);
    return 0;
}

float

  這下365.12345對的上了。但是,請注意double類型也是有精度範圍的。如果更高精度的數據,double也會出現誤差。我們日常的應用中,不會苛求一個精度完美的數值,是會允許存在一定誤差範圍的。但是,如果涉及金融等精度關鍵的領域計算時。請參照相關的處理精度關鍵數值的文檔,不能簡單的使用float和double。

3. 浮點類型的sizeof

  接下來,我們用sizeof來測量一下float,和double都佔用了多少字節大小吧。

sizeof float

  float爲4,double爲8。

  sizeof測量的結果,是一個整數,表示所佔用的字節大小。字節數哪有1.5的字節的。所以這裏用%d來打印。

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章