2011-07-04 95 views
4

這是我的第一篇文章,我想感謝所有可以幫助我解決這個簡單問題的人:如何在Java中進行鑄造?瞭解在Java中鑄造

我做了這個非常簡單的類:

public class test { 
    public static void main (String[] args) 
    { 
     System.out.println((short)(1/3)); 
     System.out.println((int)(1/3)); 
     System.out.println((float)(1/3)); 
     System.out.println((double)(1/3)); 
    } 
} 

,並在執行時(官方JDK linux下的32位機上6個U26)

0 
0 
0.0 
0.0 

的這個軟件給我這個輸出問題,或者我不明白的事情,如果你願意的話,最後2個結果是0.0,我期待類似0.3333333的東西,但顯然這個演員陣型的工作方式是另一種方式:怎麼樣?

感謝

PS 我不太熟悉的英語,如果我犯了一些錯誤,這

回答

9

首先,表達1/3被執行。這個表達意味着「1除以3的整數除法」。其結果是整數0。然後這個結果(0)被轉換爲雙精度(或浮點數)。當然它會導致0.0

您必須轉換事業部的一個操作數爲雙(或浮動),把它改造成一個雙師:

double d = ((double) 1)/3; 

或者乾脆寫

1.0/3 
5

如果您使用操作/整數值我道歉,結果將被輸入作爲整數。

您將不得不強制將1或3設置爲浮點值 - 請嘗試編寫1.0/3而不是1/3

4

在最後2個例子中,你首先計算1/3,這是0.然後你把它投到浮點/雙精度上。 使用:

((float)1)/3 
1

int值coverted成雙。

(1/3)的類型爲int所以答案是0

現在0鑄造翻番或浮動,因此已變爲0.0,

1

你需要轉換操作數,而不是結果。這將產生您期望的輸出:

System.out.println(((short) 1/(short) 3)); 
System.out.println((1/3)); 
System.out.println(((float) 1/(float) 3)); 
System.out.println(((double) 1/(double) 3)); 
1

因爲括號中有1/3,所以它使用整數除法,然後轉換爲指定的類型。如果使用1.0/3.0或(float)1/3,它將評估爲.3333333。 1和3是整數文字,所以除法結果將被截斷。要使用float和double文字,在數字的末尾放置一個f或d(1.0f,1.0d)。鑄造會影響它後面的值,所以如果你的值在括號內,它會評估這個值,然後進行轉換。