int percent = (score/numberOfQuestions)*100;
progressText.setText(score+"/"+numberOfQuestions+" "+percent+"%");
どんなに疲れても0%を返します。int、double、floatにキャストしてみた
score=5 numberOfQuestions=8 のような数値に対して 0% を返すのはなぜですか?
問題は、2 つの整数を除算すると、結果の整数部分が得られることです。したがって、 (score/numberOfQuestions)
常に0になり
ます。あなたがすべきことは
int percent = (score * 100 / numberOfQuestions);
次に、*100
が最初に実行され、次に除算により正しい結果が得られます。
あなたはそれらのいずれかにキャストする必要があります:-
float percent = ((float)score/numberOfQuestions)*100;
はすでに0なので、5 / 10
次のコードのように、最終結果を任意のタイプにキャストすると、0のみが得られます。
float percent = ((float)(score/numberOfQuestions))*100;
これはまたあなたに与えるでしょう0.0
。0
フロートにキャストしているので。関係ない..
整数演算を確認してください。小さな値をキャストしないとコードは機能しないため、操作を移動するだけです。
int percent = 100*score/numberOfQuestions;
int
そのパーセンテージを格納するために(整数)を使用しています。スコアと質問の数を使用するか、代わりに作成してfloat
みてください(コメントをありがとう、私はこれを完全にスキップしました...)。値の表示に問題がある場合は、DecimalFormatを使用してフォーマットすることをお勧めします。double
float
double
int
結果に小数を含めたい場合は、純粋数学を使用してパーセンテージを計算して保存するのではなく、この他の方法をお勧めします。
score/numberOfQuestions
は常に 0 から 1 の間の数値を提供します。必要な計算の精度に応じて、2 つの選択肢があります。ほとんどの場合、式を に変更できます(score * 100)/numberOfQUestions
。これにより、2 桁の精度が得られます。score * 100
int がオーバーフローすると問題が発生します。変数名を考えると、この場合にこれが起こるとは思えません。2 番目の可能性は、計算のために式を double に変換することです。
int percent=(int)(((double)score/numberOfQuestions)*100);