2011-07-04 6 views
4

これは私の最初の投稿です。この簡単な質問で私を助けることができるすべての人に感謝します。 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)); 
    } 
} 

0 
0 
0.0 
0.0 

(Linuxでの32ビットマシン上で公式JDK 6 U26)を実行する際に、ソフトウェアのこの作品は、私にこの出力を提供します問題、またはもし私が理解できないことは、最後の2つの結果が0.0であることです。私は0.3333333のようなものを期待していましたが、明らかにキャストは別の方法で動作します。

おかげ

PS 私はこの

答えて

9

まず、表現1/3が実行されます。この表現は、「1の3による整数除算」を意味します。その結果は整数0です。次に、この結果(0)をダブル(またはフロート)にキャストします。もちろん、それは0.0につながります。

あなたは二重の部門にそれを変換するために、二重(またはフロート)に分裂のオペランドの一方をキャストする必要があります。

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

または単にint型がへcovertedさ

1.0/3 
5

のために私は謝罪いくつかの誤りを犯した場合、私はあなたが整数値でオペレータ/を使用する場合は、結果が入力され、英語の言語とそれほど慣れていませんよ整数として。

浮動小数点値に強制する必要があります.1/3の代わりに1.0/3と記述してください。

4

最後の2つのケースでは、最初に1/3を計算し、0です。次に、float/doubleにキャストします。 用途:

((float)1)/3 
1

を書きますダブル。

(1/3)はint型である、それは0.0

1

になってきたので、答えは0

今0が二重またはフロートにキャストされますので、あなたはその結果、オペランドをキャストする必要はありません。

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)。キャストはそれの後の値に影響を与えます。したがって、値がかっこ内にあれば、キャストはそれを評価し、キャストを行います。

関連する問題