0

私が持っているコード、

public static void main(String[] args) {
    int x = 27;
    int y = 5;
    double z = x / y;
    System.out.println(" x = " + x + " y = "+y +" z = "+z);
}

上記のコードで、変数 z の小数点以下の桁数 .4 を出力するには、printf を使用する必要があることはわかっていますが、変数 z が 5.4 を格納せず、5 だけを格納するのはなぜですか? 私は int / int を意味し、出力は double に格納されます。これは 10 進数値を完全に保持できますが、そうではありません。ロジックは何ですか?

4

4 に答える 4

3

オペランドの 1 つを double にキャストする必要があります

double z = (double) x / y;

その理由はx / y、スタンドアロンが int であるため、実際には 5 として評価され、次に double に解析されます。

于 2012-11-14T05:56:50.287 に答える
3

除算する前に整数をキャストする必要があります。

このような、

double z = (double) x / (double) y;
于 2012-11-14T05:56:56.470 に答える
3

これは、除算する値が int であり、double ではなく、小数点以下の桁数を出力しないために発生します。より明確にするために、たとえばこれを取り上げます

ダブル z = 27 /5; あなたと同じ

ダブル z = 27.0/5.0; 今z = 5.4; したがって、これは、計算を実行しているデータ型も、出力が期待するデータ型と同じであることを示しています。

于 2012-11-14T05:57:05.660 に答える
1

あなたが行でしていること:

double z = x / y;

は整数除算であり、結果を double に変換します

于 2012-11-14T05:58:10.780 に答える