Javaで整数をfloatに変換するにはどうすればよいですか?


82

私は2つの整数xとを持っていますy。計算する必要がx/yあり、結果としてフロートを取得したいと思います。たとえば、結果として3/21.5が欲しいです。私はそれを行うための最も簡単な(または唯一の)方法は、変換することであると考えxyfloat型に。残念ながら、私はそれを行う簡単な方法を見つけることができません。手伝ってくれませんか。


8
フロート結果=((float)x)/ y?
mibollma 2010

これをチェックしてください:xahlee.org/java-a-day/casting.html
fasseg 2010


1
@VinAy:この場合お勧めしませんBigDecimalの普遍的に正しい置き換えではありませんfloat
マットボール

1
@VinAy:それは目的が何であるかに完全に依存します。彼が金融をしているなら、あなたは正しいです。彼が小惑星の軌道を計算しているのなら、あなたはそうではありません。
user207421 2010

回答:


153

少なくとも1つのオペランドをfloatにキャストする必要があります。

float z = (float) x / y;

または

float z = x / (float) y;

または(不要)

float z = (float) x / (float) y;

これは次よりも効率的ですか:float z =(1.0 * x)/ y; ?浮動小数点変換は、乗算よりも内部的に効率的ですか?Tnx!
MSquare 2013

1
わかりませんが、99%以上は関係ないと思います。リモートでさえボトルネックになることはありません。本当に心配している場合は、自分
マットボール

1
1つ目と2つ目は、特定のARMデバイスでエラーが発生します。必ず両方の整数をキャストしてください。
オリバーディクソン

java.lang.Integerをjava.lang.Floatにキャストすることはできません
asp 2014年

2
@ user3002853は、ボックス型とプリミティブについて読んでいます。docs.oracle.com/javase/tutorial/java/data/autoboxing.html
マットボール

5

必要がない限り、floatを使用しないでください。99%の場合、doubleの方が適しています。

int x = 1111111111;
int y = 10000;
float f = (float) x / y;
double d = (double) x / y;
System.out.println("f= "+f);
System.out.println("d= "+d);

プリント

f= 111111.12
d= 111111.1111

@Mattのコメントに続いて。

floatの精度は非常に低く(6〜7桁)、かなり簡単に重大な丸め誤差を示します。doubleの精度はさらに9桁です。フロートの代わりにdoubleを使用するコストは、99%のケースで想定されていますが、丸め誤差による微妙なバグのコストははるかに高くなります。このため、多くの開発者は浮動小数点をまったく使用しないことを推奨し、BigDecimalを強く推奨しています。

ただし、適切な丸めが使用されていれば、ほとんどの場合、doubleを使用できることがわかりました。

この場合、int xの精度は32ビットですが、floatの精度は24ビットです。1で除算しても、丸め誤差が発生する可能性があります。一方、doubleの精度は53ビットであり、かなり正確な結果を得るには十分すぎるほどです。


6
なぜ doubleよりも優れているのを詳しく説明する必要がありますfloat
マットボール

5

それがさらなる計算に関与する前に、最初の値をfloatに転送する必要があります。

float z = x * 1.0 / y;

4

//変換したい整数

int myInt = 100;

//整数をfloatにキャストする

float newFloat = (float) myInt

1
少なくともAndroidStudioでは、コンパイラはこれを行おうとする互換性のないタイプについて文句を言います。
アダムR.ターナー

3

これがあなたがそれをする方法です:

public static void main(String[] args) {
    // TODO Auto-generated method stub
    int x = 3;
    int y = 2;
    Float fX = new Float(x);
    float res = fX.floatValue()/y;
    System.out.println("res = "+res);
}

またね !


7
これには、ラッパー型(Float)の使用はまったく不要です。
マットボール

1
してください署名やキャッチフレーズを使用していない、あなたの投稿で。
meagar

1

Sameer:

float l = new Float(x/y)

最初にxとyの整数除算を計算し、次にそれからfloatを作成するため、機能しません。

float result = (float) x / (float) y;

意味的には最良の候補です。


あなたの答えはコメントでなければなりませんでした。Sameerはあなたの投稿の通知を受け取りません。意味的には、結果を計算する前に両方のintをfloatに変換する必要はありません。したがって、1つだけを変換するよりも優れているわけではありません。それは間違った印象を与えるので、劣っています、私見。
ユーザー不明
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.