【问题标题】:Java - decimal stays X.0 when calculating the averageJava - 计算平均值时小数保持 X.0
【发布时间】:2016-05-11 02:06:16
【问题描述】:

在这个脚本中,我需要填写一行数字并在我想停止它时输入 -1。当它停止时,它应该计算并显示数字的总和(总和),填写的数字数量不包括-1(数量)和平均值(平均)。每当我输入像 10 和 20 这样的数字时,它很好地表明平均值是 15。但是当小数必须改变时,例如我输入 10 和 11(所以它必须显示 10.5)它只显示 10.0 因此它是错误的。当 avg 为双精度时,为什么小数点仍保留在 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);
}

【问题讨论】:

  • 定义“十进制”。你的意思是(a)基数(b)小数点(c)小数位(d)数字?提示:只有(a)是正确的;其他只是对标准术语的滥用。注意 Java 不是脚本语言,这也不是脚本。
  • 抱歉,不清楚,反正从你的帖子中学到了一些新东西;)
  • 道歉没有必要,但我们的想法是修复你的帖子,这样人们就可以知道你在说什么。假设意味着一个答案,那就是。

标签: java loops int double decimal


【解决方案1】:

表达式avg = avg + sum / amount;可以简化为avg = sum / amount;

但是,sum / amount 部分将为您提供int 结果,因为sumamountints 以及默认情况下/ 运算符都会产生int 结果。

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

avg = ((double) sum) / amount;

【讨论】:

  • 表达式也不正确。 average = sum/count, 根据定义。代码之所以有效,是因为 average 已初始化为零。
  • 感谢您的帮助,这正是我所需要的。我想知道这个社区对咸味的投票有什么影响,虽然哈哈,我是新手。
【解决方案2】:

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

avg=((double)sum)/amount;

【讨论】:

    猜你喜欢
    • 2021-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-15
    • 1970-01-01
    • 2014-04-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多