1. ホーム
  2. java

[解決済み] Javaでdoubleをintegerに変換する

2022-03-06 21:18:44

質問

Javaで、doubleを整数に変換したいのですが、このようなことはありませんか?

double x = 1.5;
int y = (int)x;

とすると、y=1 となります。これを実行すると

int y = (int)Math.round(x);

2を取得する可能性が高いです。しかし、整数の double 表現が 1.99999998 のように見えることがあるので、Math.round() を使って double をキャストしても、丸められた数ではなく切り捨てられた数 (つまり、このコードでは 2 でなく 1) になる可能性はありませんか?

(という意味です)。このような 任意の x の値で、y が x の丸めではなく、切り捨ての結果を表示するか?)

もしそうなら:切り捨ての危険を冒すことなく、doubleを丸めたintにする良い方法はありますか?


Math.round(x)はdoubleではなくlongを返すことがわかりました。したがって、Math.round()が3.9999998のような数字を返すことはあり得ません。したがって、int(Math.round())は何も切り捨てる必要がなく、常に動作します。

どのように解決するのですか?

<ブロッククオート

によって作成されたダブルをキャストすることは可能ですか? Math.round() は、やはり切り捨てられた数字になります。

いいえ。 round() は常に正しい値に丸められ、それを long この場合、小数点以下は切り捨てられます。 しかし、四捨五入した後は小数が残らないようにします。

以下はそのドキュメントです。 Math.round(double) :

long関数は、引数に最も近いlongを返します。結果は、1/2を加えて整数に丸められ、その床を取り、結果をlong型にキャストします。つまり、結果は式の値と等しくなります。

(long)Math.floor(a + 0.5d)