我正在网上学习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);
答案 0 :(得分:2)
只需输入总点数加倍,然后除以测试次数。
如下所示,
average = ((double) totalPoints / numTests);
或将totalPoints声明为double
答案 1 :(得分:1)
尝试以下
average = (totalPoints / (double)numTests);
这会将原始numTests从整数转换为双原语数据类型。
答案 2 :(得分:1)
如果您无法更改变量的数据类型(并且无论如何都没有意义),您反而希望使用强制转换,即将值转换为其他类型。
当你除去两个整数时,确实会得到一个截断的结果。要避免这种情况而不将变量更改为浮点类型,可以将一个或两个整数转换为表达式中的浮点值。然后使用浮点值(由于转换)进行除法,因此不会发生截断。您可以通过将类型括在相关变量之前的括号中,将一个值转换为另一个类型。在您的情况下,您可以分别通过totalPoints
和numTests
来强制推导(double) totalPoints
或(double) numTests
。在演员表之后,这两个值的类型将为double
。
您只需要为分区强制转换一个值,但为了清晰起见,某些约定会抛出这两个值。