2012-08-12 47 views
-2

我錯過了什麼?簡單除法操作返回零?

float stepSize = 0.0f; 
int activeCircleRadius = 10; 
int numSteps = 24; 

AiLog.v("init activeCircleRadius " + activeCircleRadius + " numSteps " 
       + numSteps); 
stepSize = activeCircleRadius/numSteps; 
AiLog.v("stepSize is " + stepSize); 

stepSize在操作後的日誌中始終爲零。它是否與一個int分隔float有關?

+0

'float/int'是一個'float'鑑於你的例子沒有編譯,我會檢查你的代碼是什麼。 – 2012-08-12 07:55:25

+0

它編譯。 stepSize的值總是爲零。 – 2012-08-12 07:56:06

+1

float activeCircleRadius = 10.0;它顯示typeMismatch錯誤。 – 2012-08-12 07:56:25

回答

10

以下兩個變量都是整數,所以您執行整數除法:

activeCircleRadius/numSteps 

整數除法的結果是整數。結果被截斷。

要解決該問題,改變一個(或兩者)的變量的類型到float

float stepSize = 0.0f; 
float activeCircleRadius = 10; 

或添加的鑄造漂浮在除法表達式:

stepSize = (float)activeCircleRadius/numSteps; 
+0

就是這樣。我不知道整數與浮點數的區別 – 2012-08-12 07:57:46

+0

@Zed Scio:接受他的答案! – Goz 2012-08-12 08:06:42

+0

@ZedScio:哦,對不起......以爲你有足夠的時間:) – Goz 2012-08-12 08:10:25

1
With all arithmetic operators in Java, the result has the type of the largest operator. For instance: 
- float operator long => float 
- int operator int => int 
- int operator long => long 


float stepSize = 0f; 
     float activeCircleRadius = (float) 10.0; 
     int numSteps = 24; 
     stepSize = activeCircleRadius/numSteps; 
+1

這應該有助於程序*編譯*但不能解釋問題。 ;) – 2012-08-12 07:54:29

+0

反正沒有編譯問題。 0 = 0.0f 我已經把它作爲0.0f代碼,只是沒有在這裏輸入。 – 2012-08-12 07:55:20

3

別做T整數除法

stepSize = activeCircleRadius/(float)numSteps; 

總結:是的,因爲你把activeCircleRa dius由一個整數組成。

0

你正在做一個整數除法,因此不會在你的答案中得到任何小數位。嘗試改變:

stepSize = activeCircleRadius/numSteps; 

stepSize = activeCircleRadius/(float)numSteps; 
1

一個整數除法將給出結果爲0。 其10/24而不是10.0/24.0。 您需要將一個變量設置爲double或float以獲得非零答案。