我有麻煩搞清楚爲什麼這樣一個簡單的除法總是返回0故障打印長除法的價值和乘法
System.out.println(4091365376L/4091495462L * 100L);
我所有的後綴數字與LS所以他們爲多頭處理。我一直得到一個零。
我試圖計算4091365376L到4091495462L的百分比。我的值是長整型,但我只是尋找一個簡單的整數值。
我有麻煩搞清楚爲什麼這樣一個簡單的除法總是返回0故障打印長除法的價值和乘法
System.out.println(4091365376L/4091495462L * 100L);
我所有的後綴數字與LS所以他們爲多頭處理。我一直得到一個零。
我試圖計算4091365376L到4091495462L的百分比。我的值是長整型,但我只是尋找一個簡單的整數值。
你是整數舍入(實際上是截斷)的受害者。試試這個:
System.out.println(4091365376L * 100L/4091495462L);
打印99
。或轉換爲double
含蓄:
System.out.println(100.0 * 4091365376L/4091495462L);
給予99.99682057572328
。你的問題是4091495462L
比4091365376L
稍大,所以當他們潛水時,結果被截斷爲0
(如果你不確定,試試3/4
)。和0
倍100
是...
4091365376L/4091495462L * 100L
\_______________________/ |
0.99... = 0 |
\_________________________/
0
你可以表達它像
100 * 4091365376L/4091495462L
那麼這將成爲
100 * 4091365376L/4091495462L
\_______________/ |
409136537600L |
\____________________________/
99.99... = 99
我喜歡ASCII圖。在這些情況下,它確實很容易。謝謝。 –
我也是;)不客氣。 – aioobe
順序很重要,因爲是類型。長分長的產量很長。你執行除法的結果是0和0 * 100 == 0,你會使用這樣的事情好得多:
System.out.println((long) (4091365376.0/4091495462.0 * 100));
在整數運算:
4091365376/4091495462 = 0
0 * 100 = 0
你期待
4091365376/4091495462 = 0.9999682057572327
0.9999682057572327 * 100 = 99.99682057572327
但你不能用整數(或長整數)做到這一點。如果您想要雙倍值,請使用雙打。
它在Java中已經有一段時間了,但我認爲你需要使用%字符來返回「mod」。 – BillyNair