10
int percent = (score/numberOfQuestions)*100;
progressText.setText(score+"/"+numberOfQuestions+"  "+percent+"%");

どんなに疲れても0%を返します。int、double、floatにキャストしてみた

score=5 numberOfQuestions=8 のような数値に対して 0% を返すのはなぜですか?

4

6 に答える 6

15

問題は、2 つの整数を除算すると、結果の整数部分が得られることです。したがって、 (score/numberOfQuestions)常に0になり
ます。あなたがすべきことは

int percent = (score * 100 / numberOfQuestions);

次に、*100が最初に実行され、次に除算により正しい結果が得られます。

于 2012-10-10T18:11:43.467 に答える
6

あなたはそれらのいずれかにキャストする必要があります:-

float percent = ((float)score/numberOfQuestions)*100;

はすでに0なので、5 / 10次のコードのように、最終結果を任意のタイプにキャストすると、0のみが得られます。

float percent = ((float)(score/numberOfQuestions))*100;

これはまたあなたに与えるでしょう0.00フロートにキャストしているので。関係ない..

于 2012-10-10T18:09:23.220 に答える
3

整数演算を確認してください。小さな値をキャストしないとコードは機能しないため、操作を移動するだけです。

int percent = 100*score/numberOfQuestions;
于 2012-10-10T18:12:33.767 に答える
2

intそのパーセンテージを格納するために(整数)を使用しています。スコアと質問の数を使用するか、代わりに作成してfloatみてください(コメントをありがとう、私はこれを完全にスキップしました...)。値の表示に問題がある場合は、DecimalFormatを使用してフォーマットすることをお勧めします。doublefloatdouble

int結果に小数を含めたい場合は、純粋数学を使用してパーセンテージを計算して保存するのではなく、この他の方法をお勧めします。

于 2012-10-10T18:09:28.583 に答える
1

score/numberOfQuestionsは常に 0 から 1 の間の数値を提供します。必要な計算の精度に応じて、2 つの選択肢があります。ほとんどの場合、式を に変更できます(score * 100)/numberOfQUestions。これにより、2 桁の精度が得られます。score * 100int がオーバーフローすると問題が発生します。変数名を考えると、この場合にこれが起こるとは思えません。2 番目の可能性は、計算のために式を double に変換することです。

于 2012-10-10T18:14:54.617 に答える
0
int percent=(int)(((double)score/numberOfQuestions)*100);
于 2012-10-10T18:17:22.447 に答える