如何划分两个int并在Java中返回一个double

时间:2016-08-12 04:32:20

标签: java android

我是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)));

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));