c語言關於浮點型的問題

2021-09-27 09:39:06 字數 1055 閱讀 2349

雖然昨天已經看玩了資料型別,但是並沒有做習題,本以為會很輕鬆,誰知遇到了乙個神奇的問題:

書上說%f對應的是float 和double 兩種型別,lf%對應的是long double 這個很容易理解,在c prime plus中描述:

double a,b;

a=3.156e7

;scanf

("%f"

,&b)

;printf

("%f"

,a*b)

;

上述**的結果是混亂的;

我最初不知道是這裡出了問題,還以為是浮點型計算的問題,由於浮點型在記憶體中儲存方式的特點,我以為乘法計算必然出現錯誤。

於是我將b改為了int(b代表的引數是年份);

double a;

int b;

a=3.156e7

;scanf

("%d"

,&b)

;printf

("%f"

,a*b)

;

果然解決了問題,不過我很納悶,難道浮點數不能做乘法計算?那c語言也太low了,這點應該不算難。

於是我在網上查了浮點乘法,我發現我錯了,對不起小c!

實際是scanf如果對應變數是乙個double型別的話

必須使用%lf,這是我沒想到的,因為c prime plus的解釋讓我以為printf 和 scanf是一樣的,事實上這兩個函式也經常被一起提起。

明白了

double a,b;

a=3.156e7

;scanf

("%lf"

,&b)

;printf

("%f"

,a*b)

;

沒問題了

又或者

float a,b;

a=3.156e7

;scanf

("%f"

,&b)

;printf

("%f"

,a*b)

;

C語言資料儲存 浮點型

浮點數的儲存 ieee 745 乙個例項 關於e的一些注意點 1 float 3.4e 38 3.4e38 2 double 1.7e 308 1.7e308 3 long double 3.4e 4932 1.1e4932 我們以9.5為例,首先將乙個浮點型資料轉化為2進製形式,同時分為整數部分和...

C語言基礎 整型 字元型和浮點型

1.整型資料型別 c定義了5種整型資料型別。整型資料型別表 序號型別名稱 說明位元組數 取值範圍 1signed char 有符號的單位元組整數型別 1 128 127 2short int 短整型2 32768 32767 3int整型4 2147438648 2147438647 4long i...

C語言浮點型儲存到記憶體

將乙個float型轉化為記憶體儲存格式的步驟為 將這個實數的絕對值轉化為二進位制,轉化方法如下 例如11.25表示為二進位制數先將整數部分轉為二進位制 11 2 5 餘1 5 2 2 餘1 2 2 1 餘0 1 2 餘1 0結束 11的二進位制表示為 從下往上 1011 小數部分轉化為二進位制 用小...