16

ダブルスを使用してJavaで317を219で割ると、1になります。
例:

double b = 317/219;
System.out.println(b);

出力は次のとおりです:1。

これは循環小数だからですか?代わりにBigDecimalを使用する必要がありましたが、これは面倒です。

4

7 に答える 7

28

これを試して

 double b = 317/219D;

Javaのコード化された数字のデフォルトのタイプは ですint。したがって、コードをそのまま使用すると、Javaは2つのint数字で動作し、除算の結果intも同様になり、小数部分が切り捨てられて最終結果が得られ1ます。このint結果は、拡大キャスト (ソースの型がターゲットの型に "適合" することが保証されている) であるため、コンパイラの警告なしでからint 1にキャストされます。double 1

double数字のいずれかを末尾と同じようにコーディングするDことで ( も使用できますが、小文字は のように見えるdため、常に大文字を使用します)、除算の結果も同様になります。Ll1double

于 2012-12-02T09:35:01.227 に答える
5

別の代替...

double b = (double)317/219;
于 2012-12-02T13:31:37.287 に答える
3

これは、整数リテラルを使用したため、整数除算を行っているためです。

double b = 317.0/219.0;代わりに書いてみてください。

于 2012-12-02T09:34:57.300 に答える
2

実行時に例に分割がないことは言及する価値があります。317/219はコンパイル時に計算され(整数除算、小数部は破棄されます)、定数に置き換えられます。.classを逆コンパイルすると(私はJad http://www.kpdus.com/jad.htmlを使用しました)、次のように表示されます。

double b = 1.0D;
于 2012-12-02T09:48:02.567 に答える
0

これがint分割です。書く:

double b = 317.0/219;
System.out.println(b);
于 2012-12-02T09:34:57.857 に答える
0

あなたが入れた数字は整数であるため、答えもそうです。
double を取得するには、浮動小数点数を使用するか、使用する整数のいずれかをキャストする必要があります。

double b = 317.0/219;
System.out.println(b);

また:

double b = ((double)317)/219;
System.out.println(b);
于 2012-12-02T09:36:20.067 に答える