2011-11-13 32 views
1

出於某種原因,我的數學只是返回0.值已設置,我已檢查。帶有兩個整數操作數的Java分區不工作?

int currentSize = 4079; 
int totalSize = 500802; 

int percentage = ((currentSize/totalSize) * 100); 
progdialog.setProgress(percentage); 

百分比總是等於百分比。 爲什麼?

+1

還是讓我猜測:'currentSize'和'totalSize'均爲整數... – Mysticial

+0

@Mysticial是的,它已經有一段時間因爲我用Java編程,我知道它會變得非常愚蠢。 編輯:哦,我的上帝。哇。它需要是一個小數,不是嗎? –

+2

我想在答案中開始編寫語法,例如「只使用currentSize.0/totalSize.0」。 –

回答

6

正如其他人指出的那樣,問題是整數除法將小於1的任何東西都變成零。這發生之前乘以100,您可以更改操作的順序,以獲得更好的東西:如果您擔心四捨五入

int percentage = currentSize * 100/totalSize; 

,您可以使用

int percentage = (currentSize * 100 + (totalSize >> 1))/totalSize; 

這些避免與工作的費用雙值或浮點值。

+1

wtf? .......... – necromancer

+1

@agksmehx - 在第一個例子中,乘法首先發生,所以除以'totalSize'給你一個int百分比值,這是OP想要的。 (在分割之前乘以是一種避免整數除法提供過早零值的方法)。第二種做同樣的事情,但是將「總尺寸」的一半加到分子上,這樣在分割之後,就像在加整數部分之前加0.5的結果。 –

+1

+1這個答案,如果你曾經看到一個程序由於進度條的浮點除法的緊密循環而暫停。 –

4

您使用「詮釋對currentSize和總計TOTALSIZE導致整數除法從而消除小數部分,得到0。因此百分比始終是它0

變化float percentage = (((float)currentSize/totalSize) * 100);,事情將被罰款

+0

生成的百分比變量也需要是float或double,否則如果百分比小於1,它將仍然爲零,如示例中所示。 – ophychius

+0

哇。三分鐘內回答。多謝你們。邏輯錯誤。這是凌晨3點。 –

+0

正確 - 將其更改爲'float percentage =(((float)currentSize/totalSize)* 100);' – necromancer

0

因爲您的計算結果是一個double小於1的值。您將它放在一個整數中,以便截斷小數點後面的所有內容,結果爲零。嘗試將值存儲在double中。

0

如果currentSize和totalSize是整數,則此計算將執行integer division,,這會將您的分數截短爲0.使用雙精度。

0

你的代碼改成這樣:

double percentage = ((double)(currentSize/totalSize) * 100); 
progdialog.setProgress(percentage); 

希望這將有助於YOUT。 :)

+0

)如果'currentSize'和'totalSize'是int值,這將無濟於事。轉換爲'double'只會發生在右邊的(整數)操作結束時。 –

+0

現在可以了@Ted? –

+0

好得多(假設setProgress接受一個double)。 –

1

我假設currentSizetotalSizeint

currentSize = 4079; 
totalSize = 500802; 

如果是這樣,則currentSize/totalSize是一個整數除法。結果將不會有小數部分(小數部分被刪除,不會舍入)。因此結果是0

如果其中一個操作數是雙倍,則除法的結果將會有小數。因此,我投了一個整數操作數來加倍。

(double) currentSize 

計算後,如果您想要的結果在int存儲,你必須投(double轉換爲int;除去小數部分)。

int percentage = (int) ((double) currentSize ... 

整個代碼是:

int currentSize = 3; 
int totalSize = 100; 

int percentage = (int) ((double) currentSize/totalSize * 100); 
System.out.println(percentage); 
-1

整數爪哇司產生零,如果分子和分母均爲整數,其結果是小於1。 修復:

使任一操作數爲浮動數字或雙重 例如int x = 1; double y = 3.0;

X/Y給出0.333333

,其中1/3的結果爲0

+0

你不是指'float x = 1.0f; float y = 3.0f;'? – nlloyd

+0

'int y = 3.0'會將它變成'3',並且'x/y'仍然是整數除法。你會想說'double y = 3.0'。但是這已經被回答了好幾次了,所以我不知道你的回答在這裏增加了什麼。 – Teepeemm

+0

@nollyd int x = 1和double y = 3.0 – Yergalem