2013-04-23 110 views
0

從float轉換爲int時,float結果如何四捨五入爲整數?從float轉換爲int時,float結果如何四捨五入爲整數?

有時我在整數變量之間做了一些複雜的算術運算(包括乘法,除法等),並將結果再次轉換爲int。

實施例:

result = (int) ((int1 + int2) * int3/int4); 

它發生,有時結果舍入到最接近的整數,其他時間,即使浮子結果是更靠近上面的一個,有時代替結果進行舍入的下整數向上或向下2個整數(即,如果結果是-150.69,則可能發生結果= -149)。

從float到int的轉換有一定的規律,還是取決於大小寫?

在此先感謝。


實施例:

int1 = 31; 
int2 = -1366; 
int3 = 50; 
int4 = 1000; 

結果應該是-66.75但返回的一個是-65。

+0

請舉一個例子(輸入設定'int1' ...'int4')表現出您所描述的行爲。 – 2013-04-23 14:01:00

+1

所有的intn變量都是int嗎?如果是這樣,那麼這裏就沒有浮點數了,我想你的問題真的是「整數除法是如何執行的」。 – interjay 2013-04-23 14:01:31

+0

@interjay是所有的變量都是整數。 – aliants 2013-04-23 14:05:07

回答

1

在你的代碼中,除非int1int4實際上是浮點數,你沒有任何浮點類型,所以你的問題與你的代碼無關。

至於問題本身,浮點到整數的轉換總是通過截斷髮生(丟棄小數部分)。對於四捨五入,標準庫具有許多功能,如floor,ceil,round等,它們可以執行不同類型的舍入。

+0

因此,如果我的4個變量都是整數,那麼每個操作都會被截斷?這就是爲什麼它會發生-150.69被「四捨五入」到-149的原因嗎? – aliants 2013-04-23 14:02:12

+0

@aliants:是的,每個整數操作數的操作都是用整數算術單獨完成的。每個中間結果都被截斷(或溢出)以匹配正在使用的類型。除此之外,C具有使用整數類型的特定規則。一般來說,如果你使用int對象,你將得到'int'算術,並且溢出'int'的結果會導致問題。如果使用一個'unsigned int'對象,則大多數二元運算符中的另一個'int'操作數將被轉換爲'unsigned int'。如果你在'int'中使用'long','int'將被轉換爲'long'等。 – 2013-04-23 14:08:30

+0

請注意,這仍然不能解釋爲什麼-66.75被「舍入」爲-65(而不是被截斷到預期的-66)。在你的例子中(這裏的評論)-150.69將被截斷爲-150,而不是「四捨五入」到-149。 – lnafziger 2013-04-23 14:23:30