web-dev-qa-db-ja.com

2つのintの割合?

2つの整数を取得し、一方を他方で除算して小数またはパーセンテージを取得します。これら2つのintのパーセンテージまたは小数を取得するにはどうすればよいですか? (それが正しいかどうかはわかりません。.私は多分うまくいっていません...)例えば:

int correct = 25;
int questionNum = 100;
float percent = correct/questionNum *100;

これは私がそれを行うことができると思った方法ですが、それはうまくいきませんでした...私は小数(もしあれば)を100のうちのパーセントにしたいです、この場合は%25です。アイデアはありますか?

正しいコードを次に示します(Salvatore Previtiに感謝します!):

float correct = 25;
float questionNum = 100;
float percent = (correct * 100.0f) / questionNum;

(ところで、私はこれを使用してクイズチェックプログラムにプロジェクトを作成しているので、パーセンテージまたは小数が必要です)

50
Baruch

.0fを追加しない場合、整数のように扱われ、整数の除算は浮動小数点除算とは大きく異なります:)

float percent = (n * 100.0f) / v;

これ以外の整数が必要な場合は、もちろんfloatまたはdoubleを再び整数にキャストできます。

int percent = (int)((n * 100.0f) / v);

N値が21474836より小さい(つまり(2 ^ 31/100))ことがわかっている場合は、整数演算を使用してすべてを実行できます。

int percent = (n * 100) / v;

NaNを取得する場合、あなたがすることは無力であるため、もちろんゼロで分割することはできません...それは意味がありません。

79

2つのオプション:

乗算後に除算を行います。

int n = 25;
int v = 100;
int percent = n * 100 / v;

分割する前にintfloatに変換します

int n = 25;
int v = 100;
float percent = n * 100f / v;
//Or:
//  float percent = (float) n * 100 / v;
//  float percent = n * 100 / (float) v;
16
Eric

そのうちの1つはフロートである必要があります。それを保証する1つの可能な方法は次のとおりです。

float percent = (float) n/v * 100;

それ以外の場合は、 整数の除算、数値を切り捨てる を実行しています。また、doubleの正当な理由がない限り、floatを使用する必要があります。

次に発生する問題は、パーセンテージの一部が25%ではなく24.9999999999999%のように見えることです。これは、浮動小数点表現の精度低下によるものです。あなたもそれに対処する方法を決定する必要があります。オプションには、フォーマットを「修正」するための DecimalFormat または正確な値を表すための BigDecimal が含まれます。

3
Ryan Stewart

小数点以下をパーセントにするには、これを行うことができます、

float percentage = (correct * 100.0f) / questionNum;
0
Shiva
float percent = (n / (v * 1.0f)) *100
0