1樓:風若遠去何人留
這都被你發現了
首先 float double這類的資料是近似值 有精度問題 這一點你知道吧
也就是說列印出來的8.0000 未必是8.00000在你這個例子裡面
我改了一下 改為列印出20位小數
#include
int main ()
b[5]='\0';
puts(b);
}你再執行一下看看
可以發現8.00000實際上是7.99999999999872812850 所以會是轉為int的7
一般來說 要把浮點轉為int 要取得最近似的值 都是採用(int)(a+0.5) 從而達到一種四捨五入的效果
2樓:匿名使用者
顯示是8.00000,但是實際很可能是7.999999,當然擷取整數部分,就成了7
所以對於這種情況,一般都要較上乙個比較小的值
例如(int)(a+1e-6)
3樓:眾裡尋他
2.4568不能用double精確表示,可能是乙個 2.456799999....的數,具體是多少要看double的位數與表示格式。
你看到輸出的是8.000000,其實在記憶體中表示的可能是7.999999...,所以強轉int就是7;
同理:用7.999999... - 7 = 9.999999... double輸出就是10,int就是9。
希望能幫到你!
4樓:九天之馬
運算過程中a已經被int了,結果當然是a被int了幾次,所以出現7和9。
在c語言中int和double怎麼轉換?
5樓:很多很多
1、開啟baivc軟體,新建乙個空白的vc專案文du件:
2、編寫轉換zhi程式,首dao先新增標頭檔案,在main主函式回中定義int型別變數答sum,count,再定義double型別變數todouble,並進行強制型別轉換,強制轉換的格式就是括號加要轉換的型別,最後使用printf列印結果:
3、編譯執行程式,檢視轉換的結果。以上就是c語言中int和double轉換的操作步驟:
6樓:匿名使用者
使用強制型別轉換抄,就是要轉換的類襲型,加個括號。
int ia;
double da;
ia=1234;
da=(double)ia;
//這樣da就等於1234.00
da=12.34567;
ia=(int)da;
//這樣ia就等於12,問題是這種轉換會損失精度,小數部分被擷取還可以接受,如果double超出了int的最大值,高出部分的位數也會被截掉,那就是災難性的了,所以一般不做這種轉換,除非你對待轉換的資料大小心中有數。
7樓:匿名使用者
int轉換double.直接可以用double變數=int變數
double轉換為int,使用取整函式則比較安全可靠
8樓:veket的小號
(目標型別)(被轉的表示式)
9樓:
如果沒有特別的用處 直接強制型別轉換就行了吧
10樓:匿名使用者
#include"stdlio"
#include"stdlib"
int main()
printf("%d",d);
c語言:int型的強制型別轉換是按四捨五入嗎?
11樓:跪著作揖
強制型別轉換int的結果只保留整數部分,不是四捨五入。
例如:int 3.14,結果為3;
int 3.58,結果也為3。
int是將乙個數值向下取整為最接近的整數的函式。int是資料庫中常用函式中的取整函式,常用來判別乙個數能否被另乙個數整除。
擴充套件資料:
int 函式使用的注意事項:
1、 語法int(number)其中number是需要進行向下捨入取整的實數。
2、 int函式是不進行四捨五入,直接去掉小數部分取整。
3、int函式處理負數的小數時總是向上進製的。
標準規定int的最小取值範圍是 -32767 到 32767。
int的取值範圍因機器而異,但是一定要大於或者等於 -32767 到 32767。一般來說,int占用乙個字的記憶體空間。因此,字長為 16 位(bit)的舊式 ibm 相容機使用 16 位來儲存整型int,取值範圍是-32768 到 32767 。
目前的個人電腦一般都是 32 位字長的,這些電腦中,int一般也是 32 位的,取值範圍是 -2147483648 到 2147483647。對於使用 64 位 cpu 的電腦,使用更多位儲存int也是很自然的事情,取值範圍當然也會更大。
12樓:匿名使用者
作為函式,int函式指資料庫中常用函式中的
「向下取整函式」。常用來取乙個數中的整數部分。int是將乙個數值向下取整為最接近的整數的函式。為取整函式。
意思是將被轉換數直接擷取整數部分,不進行四捨五入運算。例如:
int(123.456);//取值為123
int(-123.456);//取值為124
int(1234.56);//取值為1234
擴充套件資料:
除int外,其他強制轉換有:
void:宣告函式無返回值或無引數,宣告無型別指標,顯示丟棄運算結果。(c89標準新增)
char:字元型型別資料,屬於整型資料的一種。(k&r時期引入)
int:整型資料,表示範圍通常為編譯器指定的記憶體位元組長。(k&r時期引入)
float:單精度浮點型資料,屬於浮點資料的一種。(k&r時期引入)
double:雙精度浮點型資料,屬於浮點資料的一種。(k&r時期引入)
_bool:布林型(c99標準新增)
_complex:複數的基本型別(c99標準新增)
_imaginary:虛數,與複數基本型別相似,沒有實部的純虛數(c99標準新增)
_generic:提供過載的介面入口(c11標準新增)
修飾關鍵字:
short:修飾int,短整型資料,可省略被修飾的int。(k&r時期引入)
long:修飾int,長整型資料,可省略被修飾的int。(k&r時期引入)
long long:修飾int,超長整型資料,可省略被修飾的int。(c99標準新增)
signed:修飾整型資料,有符號資料型別。(c89標準新增)
unsigned:修飾整型資料,無符號資料型別。(k&r時期引入)
restrict:用於限定和約束指標,並表明指標是訪問乙個資料物件的唯一且初始的方式。(c99標準新增)
13樓:聽不清啊
不是的。
c語言的int型的強制型別轉換是截尾取整的。
即int x=(int)3.997;
x的值是3。
14樓:匿名使用者
不會四捨五入,會直接截斷取整數部分。
15樓:匿名使用者
有四捨五入的情況,在你想要保留幾位小數的時候,多餘的緊接著的一位要四捨五入
不過c裡面沒有提供四捨五入的函式,不過你可以這樣a = (int)(a*100 + 0.5)/100這只是乙個小技巧,對a的第三位進行四捨五入比如將55.3351保留2位小數,第三位四捨五入,可以用a=(a*100+0.
5)/100.0或a=(int)(a*100+0.5)/100.
0,,,我的問題是,,兩個都行嗎?有什麼區別,我做過實驗,貌似沒什麼區別……
16樓:直接用使用者名稱
不是 是捨棄小數部分
c語言的浮點型怎麼轉換為整型?
17樓:幻翼高達
c語言中,浮點型轉換為整型可以用:強制型別轉換、自動型別轉換,例如:(int)3.14、int a = 3.14。
1、強制型別轉換
強制型別轉換是通過型別轉換運算來實現的。其一般形式為:(型別說明符)(表示式),其功能是把表示式的運算結果強制轉換成型別說明符所表示的型別。
例如: (double) a 把a轉換為雙精度浮點型,(int)(x+y) 把x+y的結果轉換為整型。
2、自動型別轉換
(1)執行算術運算時,低型別(短位元組)可以轉換為高型別(長位元組);例如: int型轉換成double型,char型轉換成int型等。
(2)賦值表示式中,等號右邊表示式的值的型別自動隱式地轉換為左邊變數的型別,並賦值給它。
(3)函式呼叫時,將實參的值傳遞給形參,系統首先會自動隱式地把實參的值的型別轉換為形參的型別,然後再賦值給形參。
(4)函式有返回值時,系統首先會自動隱式地將返回表示式的值的型別轉換為函式的返回型別,然後再賦值給呼叫函式返回。
18樓:程式猿3號
c語言有以下幾種取整方法:
1、直接賦值給整數變數。如:
int i = 2.5; 或 i = (int) 2.5;
這種方法採用的是捨去小數部分,能用於你的問題。
2、c/c++中的整數除法運算子「/」本身就有取整功能(int / int),而下面介紹的取整函式返回值是double。整數除法對正數的取整是捨去小數部分,能用於你的問題。不過整數除法對負數的取整結果和使用的c編譯器有關。
3、使用floor函式。floor(x)返回的是小於或等於x的最大整數。如:
floor(2.5) = 2
floor(-2.5) = -3
4、使用ceil函式。ceil(x)返回的是大於x的最小整數。如:
ceil(2.5) = 3
ceil(-2.5) = -2
floor()是向負無窮大捨入,floor(-2.5) = -3;ceil()是向正無窮大捨入,ceil(-2.5) = -2。floor函式能用於你的問題。
5、int b = (int)a;//取整int c = (int)(a+0.5);//四捨五入
19樓:步成文赤豪
c語言中沒有四捨五入,將浮點型轉換成整形時,只保留小數點前面的數值
20樓:匿名使用者
float ftemp;
不要後面的=0;因為一旦你分配給ftemp了值,它是無法通過鍵盤寫入的方式
賦給的,因為空間已經被占用。這不是a=b+c這樣表示式的賦值。
暈,難道要我把源**給你你直接複製?
那就給你吧!
#include
void main()
隨便輸入乙個數,然後回車,看結果
21樓:匿名使用者
可通過強制型別轉換或賦值過程中自動轉換。
強制型別轉換。c語言提供強制型別轉換符,其可表示為(型別),該操作符具有從右向左的結合型,用法示例為「(型別)變數」,則對應變數被轉換為括號中 的型別,因此想把浮點型轉換為整型時,括號中使用int即可:
如果直接把浮點型變數賦值給整型,其會自動轉換為整型:
但是注意當float型變數轉換為整型時,小數部分被捨棄,但不會遵循四捨五入的原則,如果浮點型別的值過大,超過整型所能容納的範圍,則結果是不確定的。
在c語言中int和double怎麼轉換?
22樓:鮑元斐邵琬
1、開啟vc軟體,新建乙個空白的vc專案
檔案:2、編寫轉換程式,首先新增標頭檔案,在main主函版數中定義int型別變數權sum,count,再定義double型別變數todouble,並進行強制型別轉換,強制轉換的格式就是括號加要轉換的型別,最後使用printf列印結果:
3、編譯執行程式,檢視轉換的結果。以上就是c語言中int和double轉換的操作步驟:
C語言中如何將double型資料轉換為陣列
思路是 先將double型的數字整數部分變為整型數字一一取到陣列中去 用迴圈整除可以做到,比如double i 123.456,就可以先把整數部分用j int i強制型別轉換取出放入整型變數j中,再依次取到陣列a中 a k i 10 i 10 這兩句語句就可以做到 不過數字是倒序的,最後輸出時要注意...
he檔案轉換成c語言,hex檔案轉換成C語言
吉祥二進位制 檔案有兩種,一種是文字檔案,一種是程式二進位制檔案,不管哪種檔案都可以用十六進位制編碼來顯示,稱為hex檔案。1 文字hex檔案一般不需要轉成c語言,更多的是程式二進位制檔案,用十六進位制顯示,可以轉換成c語言,一般使用相應的反彙編程式來實現,這方面的工具很多,不同的平臺略有不同。wi...
c語言中強制型別轉換究竟改變了什麼
不同型別的變數在記憶體中有不同的儲存方式和不同長度,強制轉型前後有什麼不同都要轉換過來。例如int y 3 char x char y 他們只是長短不同,就把y的高3位元組全截掉,只把最低乙個位元組賦給了x 反過來,若char y 3 int x int y 那麼,將把高3位元組全用0補齊。若是浮點...