我是Android的新手,我在创建一个数学应用程序时遇到了麻烦。
基本前提是向用户显示0到20之间的2个数字(questionTextView),然后向用户显示包含3个不正确答案和1个正确答案的网格。然后,用户单击正确的答案。
我遇到的问题是正确答案没有显示为2个小数点。
E.g。问题:4/7
答案1:12.59
答案2:15.99
答案3:9.93
答案4:0(应为0.57)
我不明白为什么正确的答案没有正确显示,因为我已将两个整数都投入到双打并包含十进制格式。
我已经尝试过Math.round(),但我无法让它工作 - 也许是因为我在for循环中生成问题的方式????
错误答案显示正确。
非常感谢任何协助。
这是我的代码:
private static DecimalFormat df2 = new DecimalFormat("#.##");
public void generateQuestion(){
//Create 2 random numbers between 0 and 20.
Random rand = new Random();
int a = rand.nextInt(21);
int b = rand.nextInt(21);
if (a==b){
b = rand.nextInt(21);
}
questionTextView.setText(Integer.toString(a) + " / " + Integer.toString(b));
/*Create a random number between 0 and 3 to determine the grid square of
the correct answer */
locationOfCorrectAnswer = rand.nextInt(4);
//Calculate the correct answer.
double correctAnswer = (int)(((double)a/(double)b));
//Generate an incorrect answer in case the correct answer is
randomly generated.
double inCorrectAnswer;
/*Loop through each square and assign either the correct answer or
a randomly generated number. */
for (int i=0; i<4; i++){
if (i == locationOfCorrectAnswer){
answers.add(df2.format(correctAnswer).toString());
} else {
inCorrectAnswer = 0.05 + rand.nextDouble() *20.0;
while (inCorrectAnswer == correctAnswer){
inCorrectAnswer = 0.05 + rand.nextDouble() *20.0;
}
answers.add(df2.format(inCorrectAnswer).toString());
}
}
//Assign an answer to each of the buttons.
button0.setText((answers.get(0)));
button1.setText((answers.get(1)));
button2.setText((answers.get(2)));
button3.setText((answers.get(3)));
答案 0 :(得分:4)
选择以下其中一项:
double correctAnswer = (double)a/b;
或
double correctAnswer = a/(double)b;
或
double correctAnswer = (double)a/(double)b;
答案 1 :(得分:2)
(((double)a/(double)b))
这会给你= 0.57然后这个(int)
这会将0.57转换为0 (int)(((double)a/(double)b));
因为整数只能保持whole numbers
因此十进制值会被截断
使用它来保持小数值
double correctAnswer = (((double)a/(double)b));
更新:要获得十进制结果,只需要将一个操作数转换为double,第二个参数的优化将由编译器完成。
更新积分:@ stackoverflowuser2010和@ cricket_007。
double correctAnswer = (double)a/b;
或
这也可以在没有使用类型转换或类型转换进行explicit
投射的情况下完成,这是由编译器完成的。
示例点数:@Andreas
double correctAnswer = a; // a , will automatically converted to double
correctAnswer /= b;
答案 2 :(得分:0)
你需要在分割之前删除强制转换为int:
这一行:
double correctAnswer = (int)(((double)a/(double)b));
应该是这样的:
double correctAnswer = (((double)a/(double)b));