C語言,int與double的問題,求助

時間 2021-10-17 02:37:57

1樓:匿名使用者

這個解釋起來還真是麻煩。需要你瞭解計算機中浮點數的表示方式。由於計算機以2進位制儲存資料,

所以小數用2進位制儲存的時候,就變得非常麻煩。

我們知道:

1/2 = 0.5

1/4 =0.25

1/8=0.125

1/16=0.0625

1/32=0.03125

1/64=0.015625 .....

以小數點為分界線,從左向右,每一個2進位制的位,就代表上面依次向下的計算結果。

比如小數點後面的2進位制數為1101

就表示0.5+0.25+0+0.0625 = 0.8125

相反,我們把0.8125這個數化成2進製表示時,就需要這樣計算

先確定第1位上的2進位制數是1還是0,由於0.8>0.5,所以確定是1

然後0.8125-0.5=0.3125

再確定第2位上的2進位制數是1還是0,由於0.3>0.25,所以確定是1

然後0.3125-0.25=0.0625

然後確定第3位上的數字是1還是0,由於0.0625<0.125,所以確定是0

再確定第4位上的數字是, 由於0.0625正好等1/16,所以確定是1,

再次相減後為0,小數表示完成,就是1101

以你的例子:d-b=0.54000

化為2進位制數就是10001010001.....

用2進製表示,是一個非常長的1,0組成的串,我沒算到底,不過可以確定,是一個很長的數。

然而計算機儲存double型資料使用的8byte,也就是64bit, 而且這64bit沒有完全使用上,還有符號位等,也就是說,計算機並沒有完全的把0.54這個數字完整的用2進位制數字表示出來。基本上可以確定是<0.

54的,也就是0.539......

所以,當x100,時變成了53.9.....

而用int時,取整,截斷了小數點後面的資料,所以變成了53

2樓:匿名使用者

double或float型別強制轉換為int型別,都是隻保留整數位,直接捨棄小數位,而不是四捨五入。

要想實現四捨五入,要在你的求得的公式裡面 + 0.5 才行。

3樓:陽光上的橋

d=c-a的結果我們計算了是2.54,但是計算機裡面完全可能是2.53999999,也可能是2.

54000001,這是因為浮點數表示的十進位制小數始終可能無法精確表示,任何時候都記住這一點,獲取小數的整數部分應該使用floor、round、ceil等函式,避免型別轉換。

4樓:

跟蹤一下看看b是什麼值

c語言,簡單的double和int的問題,求救啊!!

5樓:滄海雄風

把if後面的 ;去掉

看好 你三個if判斷後面都有

否則就與後面的;構成了一個空的

if(x<20);

等價於i if(x<20)

有問題請追問 滿意記得采納

6樓:匿名使用者

你的if語句後面根本就什麼也沒做,因為';'使得if語句提前結束了,改為這樣就對了

#include

int main()

if((x>=20)&&(x<=100))if(x>100)

return 0;}

7樓:匿名使用者

樓主你好!

我很不情願的說下面這句話!

你是新手,新手得好好看書,你的if語言再看一遍……if (條件 ); //這邊你多了一個分號!

還是那句話,你再看一邊if語句的語法,分號是木有的!

8樓:匿名使用者

if語句後不能加分號 ,如果加分號會認為if語句執行完畢,程式會直接執行大括號內的語句,起不到判定作用

程式修改為下面的會更清楚

#include"stdio.h"

void main()

else

if(x<=100)

else

return 0;

} if else語句能使該程式簡潔。

9樓:匿名使用者

去掉if後面的分號 ;

10樓:匿名使用者

if()後面沒有冒號

11樓:

if(x>100); //這裡多了一個分號。把這個分號去掉.就可以了

12樓:淦海瑤

if(x<20.0);

這樣試試

13樓:

請注意:

if(x<20);

if((x>=20)&&(x<=100));

if(x>100);

if判斷語句後加了分號,編譯時會被識別為: if(x>100){};

但是這個一般編譯器都會給你一個警告的。仔細看看

14樓:匿名使用者

if和 if之間加個else 構成巢狀

j**a中int和double的問題

15樓:育知同創教育

兩個int的值作除法運算,得到的為int,而且,得到的值是直接去掉小數部分。

假如:int i=1;j=3;i/j==0 返回的為true

同理,i/3==0 1/3==0 1/j==0都是返回為true

如果,double res=i/j 其返回的結果,不會是0.333...,而是0

如果你要得到為0.333...,則需要 res=((double)i)/j;

而你的freuslt=(int)((double)num1/num2)

則會先執行num1/num2,如果num1和num2都int,都到的結果最終會是int,這裡假設num1=6,num2=5,則num1/num2==1 為true,而不是1.2,那麼,再執行(double)res,這裡的res就是num1/num2,故res=1,所以double之後仍然為1,而不是1.2

16樓:匿名使用者

int型除法下取整。1/5=0;double型乘法結果 0*5 = 0.0

c語言 int型別的可以和double型別的比較大小嗎

17樓:匿名使用者

肯定可以啊。

但運算的話:

有相容性的,佔空間小的資料型別,可以給佔空間大的資料型別賦值不相容的,可能會造成資料丟失。int ->float可以轉換;float->int 小數部分丟失

也就是說那得看你的變數型別

你最好是先將他們轉換為同一型別量

變數的型別不管 主要是你的賦值型別

希望能幫到您。敬請採納!

中國物聯網校企聯盟

18樓:匿名使用者

可以比較大小,int類會被提升為double類再比較

19樓:43青年

可以啊int a=2;

double b=1.1

//隱式轉換,相當於if( (double)a >b )if( a> b)

20樓:程式猿3號

是可以比較的:

#include

int main()

int a=9;

double b=9.999999;

if(a > b)

printf("a>b\n");

else

if(a -  b > 0)

讓他與0比較是正確的方法

c語言,簡單的double和int的問題,求救啊

滄海雄風 把if後面的 去掉 看好 你三個if判斷後面都有 否則就與後面的 構成了一個空的 if x 20 等價於i if x 20 有問題請追問 滿意記得采納 你的if語句後面根本就什麼也沒做,因為 使得if語句提前結束了,改為這樣就對了 include int main if x 20 x 10...

C語言中float與double的區別是什麼

賀金蘭陽靜 float一般用於平常的小數,但double由於有效位數和指數範圍都比效廣所以一般用來表示比較精確的小數或者比較大的數 無法用long來表示的 如 1.121324328947893275973249,幾百億上千億等等 允秋芹敏姬 double的位數是float的2倍,float16位,...

32位的int型與double型表示的數值範圍為何不一樣

int表示整數,double表示雙精度浮點數。1 int 同樣的32位,如果表示整數也就是沒有小數位,那麼可以表示的整數範圍大約是 2的31次方 1,差不多就是int的表示範圍 2 double 而對於浮點數,比如根據ieee754浮點數表示方法中規定了,32位浮點數,第1位是符號位,第2到9位 共...