爲什麼我們不能將兩個整數的除法結果存儲到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;
它給出正確的結果。爲什麼這樣 ?
爲什麼我們不能將兩個整數的除法結果存儲到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;
它給出正確的結果。爲什麼這樣 ?
之所以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;
你正在做在b
和a
整數除法,然後存儲所產生的整數(0在你的例子)到float
類型的變量。實質上,在將值轉換爲浮點值時,您已經丟失了您正在查找的信息(假設您想要執行浮點除法),並且轉換不會使其返回。
爲了得到你想要的(同樣,假設你想要做一個浮點除)的結果,你需要你把前操作數的至少一個轉換爲float
。
int a = 100;
int b =50;
float temp = (float)b/a;
我想你會得到。 :) – 2011-04-08 10:59:31
你......:D ...... – Maulik 2011-04-08 11:08:39
其整數除法 - 50/100爲0,其餘的(可以使用模數)爲50。
您將需要使用花車,無論你從int投或與他們開始達您。
下面的語句的意思,你是鑄造的整數值到浮點盯着操作前
float temp = (float)b/(float)a;
因此可以被看作是下面
float temp = (float)50/(float)100;
然後
float temp = 50.0/100.0 ;
而且結果
temp = 0.5;
任何人都知道這個編譯器行爲背後的原因?顯然,大量的整數組合會產生一個非整數值,所以編譯器會假設你想在每種情況下返回一個整數,這似乎很奇怪。 – 2016-09-28 22:32:28