web-dev-qa-db-ja.com

javaでdoubleを整数に変換する

Javaでは、doubleを整数に変換したいのですが、こうすればいいのですが。

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

あなたはy = 1を得ます。あなたがこれをするならば:

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

しかし、私は疑問に思います。整数の二重表現は1.9999999998か何かのように見えることがあるので、Math.round()で作成したdoubleをキャストしてもやや切り捨てられた数字になる可能性があります私たちが探している四捨五入した数よりも(すなわち:表示されているコードの2の代わりに1)?

(そして、そうです、私はそのように意味しています:xには任意の値があります。ここで、yはxの丸められた表現ではなく切り捨てられた結果を示しますか?)

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


考えたこと:Math.round(x)はdoubleではなくlongを返します。したがって、Math.round()が3.9999998のような数値を返すことは不可能です。したがって、int(Math.round())は何も切り捨てる必要はなく、常に機能します。

106
vdMandele

Math.round()によって作成されたdoubleをキャストしても、まだ数字が切り捨てられる可能性があるかどうか

いいえ、round()は常にあなたのdoubleを正しい値に丸めます、そして、それは小数点以下を切り捨てるlongにキャストされます。しかし、四捨五入の後、小数部分は残っていません。

これが Math.round(double) のドキュメントです。

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

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

データ型Doubleからintには、次のものを使用できます。

Double double = 5.00;

int integer = double.intValue();
22
Charlie
Double perValue = 96.57;
int roundVal= (int) Math.round(perValue);

私の目的を解決しました。

8