【问题标题】:How to output the decimal in average?如何平均输出小数?
【发布时间】:2013-04-03 22:03:18
【问题描述】:

平均显示小数时有问题。它一直显示 0.00 或 0.1。 我试图把它加倍,但我仍然得到相同的结果。另外,我想将我输入的第一个整数包含在总和中,但我不知道如何。请帮助:

import java.io.*;
import java.util.*;

public class WhileSentinelSum 
{
static final int SENTINEL= -999;

public static void main(String[] args)
{
    // Keyboard Initialization
        Scanner kbin = new Scanner(System.in);

    //Variable Initialization and Declaration
        int number, counter;
        int sum =0;
        int average;

    //Input
        System.out.print("Enter an integer number: " );
        number = kbin.nextInt();
        counter=0;


    //Processing
    //Output
        while(number != SENTINEL)
        {
            counter++;
            System.out.print("Enter an  integer number: ");
            number = kbin.nextInt();
            sum += number;
        }

        if (counter !=0)
            System.out.println("\nCounter is: " + counter);
        else
            System.out.println("no input");

        average= sum/counter;
        System.out.println("The sum is " + sum);
        System.out.println("The average is " + average);


        System.out.println();

    }//end main
}//end class

【问题讨论】:

标签: java while-loop sum average sentinel


【解决方案1】:

即使您将average 声明为doublesumcounter 变量也是int,因此Java 在将其分配给average 之前仍然使用integer division,例如5 / 10 的结果是 0 而不是 0.5

在除法之前将变量之一强制转换为double 以强制进行浮点运算:

double average;

...
average = (double) sum / counter;

您可以通过在进入 while 循环之前对其进行处理来将第一个数字包含在计算中(如果它不是标记值)。

【讨论】:

  • 谢谢,我输入的第一个整数如何加到和中?
  • 与您在 while 循环中添加总和的方式相同。
  • 它给出了不同的答案
  • 不同和不正确?确保您也计算第一个数字。
  • 我做了..输入一个整数:1 输入一个整数:1 输入一个整数:1 输入一个整数:-999 计数器是:3.0 总和是-1996.0 平均值是- 665.3333333333334
【解决方案2】:

看起来问题出在上面的那一行

average = sum/counter;

即使您将average 设为doublesum/counter 仍然是整数除法,它会产生整数答案。你可以试试说

double average = ((double)sum)/counter;

另一种解决方案是将sumcounter 设为double 类型,同时将average 设为double

【讨论】:

  • 从技术上讲,没有必要将(double) sum 括在括号中...无论如何,转换都将应用于sum。话虽如此,您可以通过说它更具表现力来提出支持括号的论点。
【解决方案3】:
average = sum/counter;

这一行正在执行整数除法(即,它会切断真实结果的小数部分)。你应该把它改成

average = (double) sum / counter;  // perform double division, not int division

首先将sum 转换为double,然后执行常规的双重除法。

请注意,您需要将average 变量的类型更改为double


只是为了说明我的观点:

int a = 3;
int b = 2;

System.out.println(a / b);
System.out.println((double) a / b);
1 1.5

【讨论】:

    【解决方案4】:

    将总和和平均值初始化为加倍。 使用 kbin.nextDouble()。

    【讨论】:

    • 最好将它们保留为 int,但将其中一个转换为 double 用于除法。
    【解决方案5】:

    据说:当需要确切的结果时,切勿使用doublefloat 你应该改用BigDecimal。原语不使用大多数人期望的舍入模式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多