2013-03-20 61 views
-1

我是新來的Java,我想這樣做:Java新手:爲什麼不給我正確的結果?

System.out.println(1/20 * 1000); 

這應輸出50,但由於某些原因,它輸出0

我通過鍵入

System.out.println((int) (1F/20F * 1000F)); 
固定它

(我知道你不需要int投影,但我只是想看看它是否工作)

爲什麼Java給了我這個奇怪的結果?

+0

和http://stackoverflow.com/questions/7220681/division- java中的整數 – sharakan 2013-03-20 18:45:05

回答

1

讓我們來分解它。您的代碼是有點像這樣:

int tmp1 = 1/20; 
int tmp2 = tmp1 * 1000; 
System.out.println(tmp2); 

現在牢記的是,當兩個操作數是整數,該操作將使用整數算術執行。這意味着tmp1爲0 ...這意味着tmp2將爲0

你的第二個版本是不是等同於:

float tmp1 = 1F/20F; // Both values are of type "float" here 
float tmp2 = tmp1 * 1000F; 
int tmp3 = (int) tmp2; 
System.out.println(tmp3); 

現在tmp1大致 0.05,tmp2大致 50 ,tmp3是50.值得注意的是,由於浮點運算的變幻莫測,我不會非常驚訝地得到49的值 - tmp1不能是正好 0.05,因爲這不能表示爲float

一般來說,如果一個大的語句沒有達到你期望的值,那麼就有必要將它分解成更小的語句 - 讓你可以更輕鬆地一步一步地進行調試。

+0

謝謝,非常好的解釋。 :) – user2102293 2013-03-20 18:47:08

2

由於Java正在執行integer division(JLS 15.17),其中1/20爲0,小數部分被丟棄。

指定1F是一個float文字。在這種情況下,Java將按預期執行分割。

+0

哇,我現在感覺有點愚蠢。謝謝你的幫助... – user2102293 2013-03-20 18:46:01

0

當將

int/int 

時,您只能得到int類型的結果有2個整數 - 數字點之前

+0

謝謝,我可以自己找到這個...對不起:& – user2102293 2013-03-20 18:47:55

相關問題