2013-10-07 86 views
-1

我在嘗試計算一些百分比時遇到了一些奇怪的結果。如果我的值是1,最大值是2,那麼結果應該是50%(因爲1是2的50%),但是我得到1%的結果。這是我的代碼:在計算百分比時,Java中出現奇怪的除法錯誤

int percent = (runningMins/goal.getGoalMins()) * 100; 
System.out.println(runningMins +", " + goal.getGoalMins() + ", progress: " + percent); 

結果時runningMins = 1和goal.getMins = 1:

1, 1, progress: 100 

結果時runningMins = 1和goal.getMins = 2:

1, 2, progress: 1 

runningMins = 1和goal.getMins = 4:

1, 4, progress: 1 

runningMins = 1和goal.getMins = 8:

1, 8, progress: 1 

我在做什麼錯在這裏?

+2

你能給出整個代碼嗎? – xiriusly

+0

這些變量有沒有機會? –

+0

使用全雙。只有你真的需要時才轉換。 – CsBalazsHungary

回答

2

你可以嘗試:

int percent = ((float)runningMins/goal.getGoalMins()) * 100; 

或更好,但

int percent = (100 * runningMins)/goal.getGoalMins() 

因爲整數除以給不了別的東西,然後0或1 ...

+1

ewww浮動,我們是否記憶匱乏。我個人更喜歡第一個,因爲它沒有整數圓整問題 –

+2

但是,如果這是他的問題,他應該得到0而不是1. – Maroun

+0

我同意(並在之前的評論中說過),也許可能他在複製/粘貼代碼時做了一個類型。 –

0
int percent = ((float)(runningMins /goal.getGoalMins())) * 100; 

Java arithmetics for calculating a percentage

+0

仍然不會幫助他,因爲他得到1這是奇怪的),而不是0. – Maroun

+0

@MarounMaroun當runningMins爲0,每當runningMins> 0我得到1時,我確實得到0。 –

+0

@ClickUpvote那是什麼使每個人都感到困惑,因爲System.out。的println(99/100);打印0,因爲它應該在整數數學規則下 –

0

這樣試試

float percent = (runningMins /(float) goal.getGoalMins()) * 100; 
+0

@ClickUpvote將返回類型的百分比更改爲浮動,就像我做的那樣 – SpringLearner