2012-06-18 38 views
3

我有麻煩搞清楚爲什麼這樣一個簡單的除法總是返回0故障打印長除法的價值和乘法

System.out.println(4091365376L/4091495462L * 100L); 

我所有的後綴數字與LS所以他們爲多頭處理。我一直得到一個零。

我試圖計算4091365376L到4091495462L的百分比。我的值是長整型,但我只是尋找一個簡單的整數值。

+0

它在Java中已經有一段時間了,但我認爲你需要使用%字符來返回「mod」。 – BillyNair

回答

7

你是整數舍入(實際上是截斷)的受害者。試試這個:

System.out.println(4091365376L * 100L/4091495462L); 

打印99。或轉換爲double含蓄:

System.out.println(100.0 * 4091365376L/4091495462L); 

給予99.99682057572328。你的問題是4091495462L4091365376L稍大,所以當他們潛水時,結果被截斷爲0(如果你不確定,試試3/4)。和0100是...

4
4091365376L/4091495462L * 100L 
\_______________________/  | 
     0.99... = 0    | 
     \_________________________/ 
        0 

你可以表達它像

100 * 4091365376L/4091495462L 

那麼這將成爲

100 * 4091365376L/4091495462L 
\_______________/    | 
    409136537600L    | 
    \____________________________/ 
      99.99... = 99 
+0

我喜歡ASCII圖。在這些情況下,它確實很容易。謝謝。 –

+0

我也是;)不客氣。 – aioobe

-1

順序很重要,因爲是類型。長分長的產量很長。你執行除法的結果是0和0 * 100 == 0,你會使用這樣的事情好得多:

System.out.println((long) (4091365376.0/4091495462.0 * 100)); 
-1

在整數運算:

4091365376/4091495462 = 0 
0 * 100 = 0 

你期待

4091365376/4091495462 = 0.9999682057572327 
0.9999682057572327 * 100 = 99.99682057572327 

但你不能用整數(或長整數)做到這一點。如果您想要雙倍值,請使用雙打。