2014-10-16 46 views
2
2/4 = 0; // it should be 0.5, but the result is 0 

2 % 4 = 2 // its should be 0, cuz there are no remainders, but somehow the result is 2 

爲什麼它給出了這個結果,我做錯了什麼?Java模塊和分區差異

+4

「整數算術」 – Bathsheba 2014-10-16 13:38:52

+0

因爲java不支持自動類型轉換。 – 2014-10-16 13:39:21

+0

我應該如何使用正確的結果? – WebEinstein 2014-10-16 13:39:38

回答

4

對於第一個:由於24是整數,這是做整數除法,這意味着任何小數部分被丟棄。它被捨去。如果你想強制它成爲浮點,你想要2/4.02.0/4。現在其中一個是浮點數double而不是int,所以結果也是double

對於第二個:當你除​​以4時,你得到0餘數2,所以答案是2。我懷疑你正在考慮將4除以2,在這種情況下,其餘的肯定是0,所以如果你嘗試4 % 2,你會得到0

+0

+1,但我個人喜歡首先看到「doctored」字面意思(爲了提高可讀性),所以我有2.0/4。另外,我發現'(double)2/4'令人討厭,因爲有一天,重構爲'(double)(2/4)',你又回到了你開始的地方。 – Bathsheba 2014-10-16 13:42:24

+0

@Bathsheba我已經添加到幽默你:) – 2014-10-16 13:43:49

+0

現在我嗚嗚。 – Bathsheba 2014-10-16 13:45:03

1

除以2 int(s)的結果是int。一個參數更改爲double,像

double v = ((double) 2/4); 
System.out.println(v); 

,你會得到

0.5 

最後(對模數),4個進入2 0倍。並且,2 - (4*0) = 2;所以模數運算(或餘數)是正確的。