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 结果,因为 sumamount 以及 int 和默认情况下/ 运算符产生 int 结果。

因此您必须(至少)对其中一个操作数进行转换,即:

avg = ((double) sum) / amount;

将 int sum 转换为 float sum 并将 int amount 转换为 float amount。 或

avg=((double)sum)/amount;