Java doublesを使用して317を219で除算すると、1になります。
例えば:
double b = 317/219;
System.out.println(b);
出力は:1。
これは繰り返し10進数だからですか?煩わしいBigDecimalを代わりに使用する必要がありました。
これを試して
double b = 317/219D;
Java=のコード化された数値のデフォルトのタイプはint
であるため、現在のコードではJavaは2つのint
の数値と除算の結果もint
となり、小数部が切り捨てられて1
の最終結果が得られます。このint
の結果はキャストされます拡張キャストであるため、コンパイラの警告なしにint 1
からdouble 1
へ(ソースタイプがターゲットタイプに「適合する」ことが保証されているもの)。
いずれかの数値をdouble
として末尾にD
を付けてコーディングします(d
も使用できますが、L
が小文字であるため、常に大文字を使用しますl
は1
)のように見えます。除算の結果もdouble
になります。
別の選択肢...
double b = (double)317/219;
これは、整数リテラルを使用したため、整数除算を行っているためです。
double b = 317.0/219.0;
代わりに。
実行時にサンプルに分割がないことは言及する価値があります。 317/219はコンパイル時に計算され(整数の除算、小数は破棄されます)、定数で置き換えられます。 .classを逆コンパイルすると(私はJad http://www.kpdus.com/jad.html を使用しました)、
double b = 1.0D;
これはint
除算です。書く:
double b = 317.0/219;
System.out.println(b);
あなたが置く数字は整数なので、答えもそうです。
doubleを取得するには、浮動小数点数を使用するか、使用する整数の1つをキャストする必要があります。
double b = 317.0/219;
System.out.println(b);
または:
double b = ((double)317)/219;
System.out.println(b);