2011-04-08 54 views
7

爲什麼我們不能將兩個整數的除法結果存儲到float變量中?objective c float值

int a = 100; 
int b =50; 
float temp = b/a; 

它給出t = 0!

也是我做

int temp = b/a; 

它給T = 0!

,但是當我做

float temp = (float)b/(float)a; 

它給出正確的結果。爲什麼這樣 ?

回答

22

之所以float temp = b/a;給人0,而float temp = (float)b/a;給出0.5是編譯器確定基於類型的操作數的除法運算器的輸出類型,而不是目標存儲類型。簡單地說:

int / int = int 
float/ int = float 
int /float = float 
float/float = float 

所以,當你做float temp = b/a;你正在做在ba整數除法,然後存儲所產生的整數(0在你的例子)到float類型的變量。實質上,在將值轉換爲浮點值時,您已經丟失了您正在查找的信息(假設您想要執行浮點除法),並且轉換不會使其返回。

爲了得到你想要的(同樣,假設你想要做一個浮點除)的結果,你需要你把前操作數的至少一個轉換爲float

+0

任何人都知道這個編譯器行爲背後的原因?顯然,大量的整數組合會產生一個非整數值,所以編譯器會假設你想在每種情況下返回一個整數,這似乎很奇怪。 – 2016-09-28 22:32:28

3
int a = 100; 
int b =50; 
float temp = (float)b/a; 
+0

我想你會得到。 :) – 2011-04-08 10:59:31

+0

你......:D ...... – Maulik 2011-04-08 11:08:39

3

其整數除法 - 50/100爲0,其餘的(可以使用模數)爲50。

您將需要使用花車,無論你從int投或與他們開始達您。

2

在你的情況50/100是0.2。通過獲得兩個整數的結果,結果也將是整數形式,因此它會截斷小數部分,只給出0。但在浮點數它被認爲是一個浮動部門的情況下,所以你會得到0.2

+0

雅但臨時變量是浮動,所以爲什麼結果被截斷,而溫度能夠存儲浮動值? – Maulik 2011-04-08 11:11:13

+0

因爲在Objective-C'/'中對整數參數執行整數除法,因此4/5四捨五入爲0,3/2四捨五入爲1,依此類推。在執行分割之前,您可能想要將一些數字轉換爲浮點形式。 – visakh7 2011-04-08 11:13:41

3

下面的語句的意思,你是鑄造的整數值到浮點盯着操作前

float temp = (float)b/(float)a; 

因此可以被看作是下面

float temp = (float)50/(float)100; 

然後

float temp = 50.0/100.0 ; 

而且結果

temp = 0.5;