Java - 计算平均值时小数保持X.0
Java - decimal stays X.0 when calculating the average
在这个脚本中,我需要填写一行数字并在我想停止它时键入 -1。当它停止时,它应该计算并显示数字的总数(sum),不包括-1(amount)和平均值(avg)的填充数字量。每当我输入像 10 和 20 这样的数字时,它很好地显示平均值是 15。但是当小数点必须改变时,例如我输入 10 和 11(所以它必须显示 10.5)它只显示 10.0 因此它是错误的。当平均值为双精度时,为什么小数点保留在 X.0 上?我做错了什么?
public static void main(String[] args) {
Scanner reader = new Scanner(System.in);
int sum = 0;
int amount = 0;
double avg = 0;
while (true) {
System.out.println("Type numbers: ");
int number = Integer.parseInt(reader.nextLine());
if (number == -1) {
break;
} else {
amount++;
sum = sum + number;
}
}
avg = avg + sum / amount;
System.out.println("Thank you and see you later!");
System.out.println("The sum is: " + sum);
System.out.println("How many numbers: " + amount);
System.out.println("Average: " + avg);
}
表达式avg = avg + sum / amount;
可以简化为avg = sum / amount;
。
然而,sum / amount
部分会给你一个 int
结果,因为 sum
和 amount
以及 int
和默认情况下/
运算符产生 int
结果。
因此您必须(至少)对其中一个操作数进行转换,即:
avg = ((double) sum) / amount;
将 int sum 转换为 float sum 并将 int amount 转换为 float amount。
或
avg=((double)sum)/amount;
在这个脚本中,我需要填写一行数字并在我想停止它时键入 -1。当它停止时,它应该计算并显示数字的总数(sum),不包括-1(amount)和平均值(avg)的填充数字量。每当我输入像 10 和 20 这样的数字时,它很好地显示平均值是 15。但是当小数点必须改变时,例如我输入 10 和 11(所以它必须显示 10.5)它只显示 10.0 因此它是错误的。当平均值为双精度时,为什么小数点保留在 X.0 上?我做错了什么?
public static void main(String[] args) {
Scanner reader = new Scanner(System.in);
int sum = 0;
int amount = 0;
double avg = 0;
while (true) {
System.out.println("Type numbers: ");
int number = Integer.parseInt(reader.nextLine());
if (number == -1) {
break;
} else {
amount++;
sum = sum + number;
}
}
avg = avg + sum / amount;
System.out.println("Thank you and see you later!");
System.out.println("The sum is: " + sum);
System.out.println("How many numbers: " + amount);
System.out.println("Average: " + avg);
}
表达式avg = avg + sum / amount;
可以简化为avg = sum / amount;
。
sum / amount
部分会给你一个 int
结果,因为 sum
和 amount
以及 int
和默认情况下/
运算符产生 int
结果。
因此您必须(至少)对其中一个操作数进行转换,即:
avg = ((double) sum) / amount;
将 int sum 转换为 float sum 并将 int amount 转换为 float amount。 或
avg=((double)sum)/amount;