为什么我的double值中的小数位输出为“.0”?

时间:2014-08-25 18:33:27

标签: java double

我正在网上学习java课程,我需要制作一个计算成绩的程序。但是,我的输出应该有小数位,但它有一个0.我明白,当你将一个double除以一个整数时,它会截断(或删除小数值,以防我使用该字错误),但是我不允许更改初始化或添加任何。这意味着我无法在初始化中将数据类型从int更改为double。

我不太清楚这个术语的正确用法是什么,因为我在这里和谷歌的搜索都没有发现。

测试3的平均计算应该是小数位。前两个提出了97.0和88.0,正如他们应该的那样。第三个应该是86.333,三个重复。

 //local variables
 int numTests = 0;       //counts number of tests
 int testGrade = 0;      //individual test grade
 int totalPoints = 0;    //total points for all tests
 double average = 0.0;   //average grade

    //Test 1 Grade
    testGrade = 97;
    numTests++;     //number of tests increased by one.
    totalPoints = totalPoints + testGrade;     //add the test grade to the total points.
    average = (totalPoints / numTests);     //calculate the average out of all the tests.
    System.out.print("n = " + numTests + "  New Test Grade = " + testGrade + "  Total Points = " + totalPoints);
    System.out.println("   Average Score: " + average);   

    //Test 2 Grade
    testGrade = 79;
    numTests++;
    totalPoints += testGrade;
    average = (totalPoints / numTests);
    System.out.print("n = " + numTests + "  New Test Grade = " + testGrade + "  Total Points = " + totalPoints);
    System.out.println("   Average Score: " + average);

    //Test 3 Grade
    testGrade = 83;
    numTests++;
    totalPoints += testGrade;
    average = (totalPoints / numTests);
    System.out.print("n = " + numTests + "  New Test Grade = " + testGrade + "  Total Points = " + totalPoints);
    System.out.println("   Average Score: " + average);

3 个答案:

答案 0 :(得分:2)

只需输入总点数加倍,然后除以测试次数。

如下所示,

average = ((double) totalPoints / numTests);

或将totalPoints声明为double

答案 1 :(得分:1)

尝试以下

average = (totalPoints / (double)numTests);

这会将原始numTests从整数转换为双原语数据类型。

答案 2 :(得分:1)

如果您无法更改变量的数据类型(并且无论如何都没有意义),您反而希望使用强制转换,即将值转换为其他类型。

当你除去两个整数时,确实会得到一个截断的结果。要避免这种情况而不将变量更改为浮点类型,可以将一个或两个整数转换为表达式中的浮点值。然后使用浮点值(由于转换)进行除法,因此不会发生截断。您可以通过将类型括在相关变量之前的括号中,将一个值转换为另一个类型。在您的情况下,您可以分别通过totalPointsnumTests来强制推导(double) totalPoints(double) numTests。在演员表之后,这两个值的类型将为double

您只需要为分区强制转换一个值,但为了清晰起见,某些约定会抛出这两个值。