C語言中的小數

2021-10-02 23:39:22 字數 3844 閱讀 6236

小數分為整數部分和小數部分,它們由點號.分隔,例如 0.0、78.0、4.023、0.27、-927.148 -0.57 等都是合法的小數,這是最常見的小數形式,我們將它稱為十進位制形式。

此外,小數也可以採用指數形式,例如 7.25×102、0.0368×105、100.22×10-2、-27.36×10-3 等。任何小數都可以用指數形式來表示。

c語言同時支援以上兩種形式的小數。但是在書寫時,c語言中的指數形式和數學中的指數形式有所差異。

c語言中小數的指數形式為:

aen 或 aen
a 為尾數部分,是乙個十進位制數;n 為指數部分,是乙個十進位制整數;e或e是固定的字元,用於分割尾數部分和指數部分。整個表示式等價於 a×10n。

指數形式的小數舉例:

2.1e5 = 2.1×105,其中 2.1 是尾數,5 是指數。

3.7e-2 = 3.7×10-2,其中 3.7 是尾數,-2 是指數。

0.5e7 = 0.5×107,其中 0.5 是尾數,7 是指數。

c語言中常用的小數有兩種型別,分別是 float 或 double;float 稱為單精度浮點型,double 稱為雙精度浮點型。

小數的長度是固定的,float 始終占用4個位元組,double 始終占用8個位元組。

小數也可以使用 printf 函式輸出,包括十進位制形式和指數形式,它們對應的格式控制符分別是:

%f 以十進位制形式輸出 float 型別;

%lf 以十進位制形式輸出 double 型別;

%e 以指數形式輸出 float 型別,輸出結果中的 e 小寫;

%e 以指數形式輸出 float 型別,輸出結果中的 e 大寫;

%le 以指數形式輸出 double 型別,輸出結果中的 e 小寫;

%le 以指數形式輸出 double 型別,輸出結果中的 e 大寫。

小數的表示以及輸出:

#include 

#include

intmain()

執行結果:

a=

3.020000e-01

b=128.100998

c=123.000000

d=1.126400e+05

e=0.007623

f=1.230024

程式解說:

%f 和 %lf 預設保留六位小數,不足六位以 0 補齊,超過六位按四捨五入截斷。

將整數賦值給 float 變數時會變成小數。

以指數形式輸出小數時,輸出結果為科學計數法;也就是說,尾數部分的取值為:0 ≤ 尾數 < 10。

b 的輸出結果讓人費解,才三位小數,為什麼不能精確輸出,而是輸出乙個近似值呢?這和小數在記憶體中的儲存形式有關,很多簡單的小數壓根不能精確儲存,所以也就不能精確輸出。

另外,小數還有一種更加智慧型的輸出方式,就是使用%g。%g 會對比小數的十進位制形式和指數形式,以最短的方式來輸出小數,讓輸出結果更加簡練。所謂最短,就是輸出結果占用最少的字元。

%g 使用示例:

#include 

#include

intmain()

執行結果:

a=

1e-05

b=3e+07

c=12.84

d=1.22934

對各個小數的分析:

1 . a 的十進位制形式是 0.00001,占用七個字元的位置,a 的指數形式是 1e-05,占用五個字元的位置,指數形式較短,所以以指數的形式輸出。

2 . b 的十進位制形式是 30000000,占用八個字元的位置,b 的指數形式是 3e+07,占用五個字元的位置,指數形式較短,所以以指數的形式輸出。

3 . c 的十進位制形式是 12.84,占用五個字元的位置,c 的指數形式是 1.284e+01,占用九個字元的位置,十進位制形式較短,所以以十進位制的形式輸出。

4 . d 的十進位制形式是 1.22934,占用七個字元的位置,d 的指數形式是 1.22934e+00,占用十乙個字元的位置,十進位制形式較短,所以以十進位制的形式輸出。

我們需要特別注意:

%g 預設最多保留六位有效數字,包括整數部分和小數部分;%f 和 %e 預設保留六位小數,只包括小數部分。

%g 不會在最後強加 0 來湊夠有效數字的位數,而 %f 和 %e 會在最後強加 0 來湊夠小數部分的位數。

總之,%g 要以最短的方式來輸出小數,並且小數部分表現很自然,不會強加零,比 %f 和 %e 更有彈性。

除了 %g,還有 %lg、%g、%lg:

%g 和 %lg 分別用來輸出 float 型別和 double 型別,並且當以指數形式輸出時,e小寫。

%g 和 %lg 也分別用來輸出 float 型別和 double 型別,只是當以指數形式輸出時,e大寫。

乙個數字,是有預設型別的:對於整數,預設是 int 型別;對於小數,預設是 double 型別。

示例

long a =

100;

int b =

294;

float x =

52.55

;double y =

18.6

;

100 和 294 這兩個數字預設都是 int 型別的,將 100 賦值給 a,必須先從 int 型別轉換為 long 型別,而將 294 賦值給 b 就不用轉換了。

52.55 和 18.6 這兩個數字預設都是 double 型別的,將 52.55 賦值給 x,必須先從 double 型別轉換為 float 型別,而將 18.6 賦值給 y 就不用轉換了。

如果不想讓數字使用預設的型別,那麼可以給數字加上字尾,手動指明型別:

在整數後面緊跟 l 或者 l(不區分大小寫)表明該數字是 long 型別;

在小數後面緊跟 f 或者 f(不區分大小寫)表明該數字是 float 型別。

請看下面的**:

long a =

100l;

int b =

294;

short c =

32l;

float x =

52.55f

;double y =

18.6f

;float z =

0.02

;

加上字尾,雖然數字的型別變了,但這並不意味著該數字只能賦值給指定的型別,它仍然能夠賦值給其他的型別,只要進行了一下型別轉換就可以了。

在c語言中,整數和小數之間可以相互賦值:

將乙個整數賦值給小數型別,在小數點後面加 0 就可以,加幾個都無所謂。

將乙個小數賦值給整數型別,就得把小數部分丟掉,只能取整數部分,這會改變量字本來的值。注意是直接丟掉小數部分,而不是按照四捨五入取近似值。

請看下面的**:

#include 

intmain()

執行結果:

f =

251.000000

, w =

19, x =

92, y =

0, z =

-87

由於將小數賦值給整數型別時會「失真」,所以編譯器一般會給出警告,讓大家引起注意。

如果感覺不錯的話請點贊喲!!!

C語言學習筆記 7 C語言中的小數

小數是由整數和小數兩部分組成,由點號.隔開,如0.23 0.444 23.67 3.98等都是合法小數,屬於十進位制數。除此外,還有指數形式,如7.25103 0.035105 27.36 10 3等。任何小數都可以用指數形式來表示。在c語言中,小數的指數形式為 aen或aen解釋 a為尾數部分,是...

C語言中的 ,

c語言中的 今天在分析乙份原始碼的時候遇到了如下 define uf call x report file line x,x static int report char file,int line,char call,int irc return irc 網上參考 cpp view plain c...

C語言中的

c語言中的 今天在分析乙份原始碼的時候遇到了如下 覺得其中的 很有意思,於是就將這個知識點整理一下。和 都是預處理指令,我們先看 用來把引數轉換成字串,請看下面的兩個例子。例子一 例子二 define sqr x printf the square of x is d.n x x 如果這樣使用巨集 ...