在我的Activity
内,我正在尝试divide
两个值,然后multiply
将它们设为100,以便提供percentage score.
我的问题是百分比分数始终为零,即使使用我正在使用的值不可能。
我做错了什么?
在活动开始时声明2个变量:
int score = 0;
int totalQuestions=0;
显示如何计算它们的Onclick逻辑:
public void onClick(View v) {
if (checkForMatch((Button) v)) {
//increment no of questions answered (for % score)
totalQuestions++;
//increment score by 1
score++;
} else {
//increment no of questions answered (for % score)
totalQuestions++;
}
}
public void writeToDatabase() {
// create instance of databasehelper class
DatabaseHelper db = new DatabaseHelper(this);
int divide = (score/ totalQuestions );
int percentageScore = (divide * 100);
Log.d("Pertrace", "per score "+ percentageScore);
Log.d("divide", "divide "+ divide);
// Adding the new Session to the database
db.addScore(new Session(sessionID, "Stroop", SignInActivity
.getUserName(), averageMedLevel, medMax, averageAttLevel,
attMax, percentageScore, myDate, "false", fileNameRaw, fileNameEEGPower, fileNameMeditation, fileNameAttention));
// single score, used for passing to next activity
single = db.getScore(sessionID);
}
注意:从我的跟踪日志中我可以看到int divide
是零,为什么考虑到score
和totalQuestions
始终大于零,情况会是这样?例如。 20和25.
答案 0 :(得分:2)
您将其保存在int
中。保存float
或double
中的值。
此外,当发生除法时,中间结果将保存在除法中使用的变量之一中。如果是int,则在truncated
中保存之前它将为double
。所以做double divide = (double)score * totalQuestions
答案 1 :(得分:2)
原因是这一行
int divide = (score/ totalQuestions);
您正在划分数字并存储在int。
中您需要存储在double
double divide = (double)score / totalQuestions;
如果您希望结果为int
double divide = (double)score / totalQuestions;
int percentageScore = (int) Math.ceil(divide * 100);
答案 2 :(得分:1)
您正在执行整数除法。首先将得分变为双精度(因此得到浮点数学),然后我会使用Math.round()
来舍入乘法的结果。例如,
int score = 3;
int totalQuestions = 4;
double divide = ((double) score / totalQuestions);
int percentageScore = (int) Math.round(divide * 100);
System.out.println(percentageScore);
输出是预期的
75
答案 3 :(得分:0)
操作数必须是float
或double
,您输入的变量也是如此:
double divide = (double) score/ totalQuestions;