1

重複の可能性:
Javaで1/3 = 0の結果が得られるのはなぜですか?

私はJavaを使用していますが、コードの一部で数値を10で割る必要があります。単純化する(そして質問を表示する)ために、printlnに入れます。

System.out.println(1/10);

それは0を出力します。それで、論理的には、それがintにキャストされていると思ったので、試してみました

System.out.println((double)1/10);

そしてそれは適切な0.1を印刷しました。なぜ初めて自動的にintにキャストされるのかわかりません。他にどこでこれを行いますか?なんで?

4

7 に答える 7

12

1はでありint、で10ありint、あなたがそうするとき、あなたはint/intを得るint

あなたがする1.0/10か、1/10.0または1.0/10.0あなたが0.1

IMHO:整数除算が必要な場合は、キャストできるものにするint/int必要があると思います。すなわちdoubleint

してただろう

 a/b          // does double division
 (int)(a/b)   // does integer division.

代わりにあなたは書く必要があります

 a/b          // does integer division
 (double) a/b // does double division
于 2012-12-30T17:30:10.437 に答える
6

それはintにキャストされません、それはすでにintです。int/intはintです。

(double)1/10また、のようにdoubleにキャストする場合、キャスト演算子は除算よりも優先されるため、これはと同じ((double)1)/10であり、除算をdoubleで発生させる効果があることに注意してください。

のように除算後にキャストする(double)(1/10)と、結果は0.0になります。

于 2012-12-30T17:30:04.663 に答える
3

数字の1つはfloatまたはdoubleでなければならないので、次のことを試してください。

System.out.println(1/10.0);
System.out.println(1/(double)10);
System.out.println(1.0/10);
于 2012-12-30T17:30:33.870 に答える
2

1は整数で、10は整数であるため、デフォルトでは除算は整数であるため、1を10で除算すると、ゼロになり、余りは1になります。

于 2012-12-30T17:30:44.383 に答える
2

これは、両方のオペランドが整数であるため、整数除算が実行され、1 x 10の整数除算の結果が整数(この場合は0)になるためです。

2番目のケースでは、1つの引数がdoubleであるため、除数もdoubleに変換され、結果はdoubleになります。

于 2012-12-30T17:30:56.937 に答える
1

次のいずれかを実行することもできます。

System.out.println(1.0 / 10);
System.out.println(1 / 10.0);
System.out.println(1.0 / 10.0);

問題はそれ1 / 10int表現であるのに対し、2番目のバージョンと上記のそれぞれはそうではないということです。

于 2012-12-30T17:31:29.920 に答える
0

それがintにキャストされていたのではなく、常にintであったということです。算術演算が2つの整数の間にある場合、結果は整数演算で定義された整数になります。http: //docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.2.2

于 2012-12-30T17:31:08.400 に答える