2012-12-31 71 views
0

所以我有點沮喪,有多少次我試過這個。 我在這裏使用#/ 100 =%* Balance = Fine,但由於某種原因總是會導致爲0.請注意,這使用外部API。一個數字的百分比

double fine = (getConfig().getBoolean("fineispercentage") == true ? getConfig().getInt("fine")/100 * count * econ.getBalance(event.getPlayer().getName()) : econ.getBalance(event.getPlayer().getName()) - (econ.getBalance(event.getPlayer().getName()) - count * getConfig().getInt("fine"))); 

如果爲true,則結果總是爲0.如果爲false,則按照預期的方式進行,即根據計數減去一個數量。

+0

數量是多少? – Bohemian

+0

金額的類型是雙倍。 –

回答

3

儘量此(未測試):

double fine = (getConfig().getBoolean("fineispercentage") == true ? getConfig().getInt("fine")/100.0 * count * econ.getBalance(event.getPlayer().getName()) : econ.getBalance(event.getPlayer().getName()) - (econ.getBalance(event.getPlayer().getName()) - count * getConfig().getInt("fine"))); 

訣竅是100.0(雙),未100(INT)

+0

我從來沒有想過會這麼簡單。謝謝! –

+1

這是正確的答案,但我更喜歡100d或100f來強制數據類型。它保證你得到你期望的類型。 – Mike

+2

@Mike 100.0絕對保證雙倍。請參閱[JLS](http://docs.oracle.com/javase/specs/jls/se7/html/jls-3.html#jls-3.10.2):「浮點型文字的類型爲float if它後面加上一個ASCII字母F或f;否則它的類型是雙重的,它可以選擇性地加上一個ASCII字母D或d「。除非有很好的理由,通常涉及非常大的陣列,否則應該使用double而不是float。 –

1

假設getInt並實際上將返回一個整數來劃分,它看起來像你'正在做整數除法,給你0

鴻溝getConfig().getInt("fine")通過100d代替100

double fine = (getConfig().getBoolean("fineispercentage") == true ? getConfig().getInt("fine")/100.0 * count * econ.getBalance(event.getPlayer().getName()) : econ.getBalance(event.getPlayer().getName()) - (econ.getBalance(event.getPlayer().getName()) - count * getConfig().getInt("fine"))); 
1

假設getConfig().getInt()返回int,該Java除法:

getConfig().getInt("fine)/100 

會做的整數除法,並生成一個int的結果,這會截斷任何小數部分,所以任何「精細」0-99的值都會導致零。解決方法是這樣的:

getConfig().getInt("fine)/100d 

添加「d」,以100使100 double值,其將執行雙師,保持小數部分。