如何平均输出小数?

时间:2013-04-03 22:03:19

标签: java while-loop sum average sentinel

我在平均显示小数时遇到问题。它一直显示.00或.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

5 个答案:

答案 0 :(得分:5)

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

在分区之前将其中一个变量强制转换为double以强制执行浮点操作:

double average;

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

您可以在进入while循环之前处理计算中的第一个数字(如果它不是sentinel值)。

答案 1 :(得分:1)

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

答案 2 :(得分:1)

看起来问题就在于

average = sum/counter;

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

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

另一种解决方案是制作sum类型的counterdouble,并将average设为double

答案 3 :(得分:0)

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

答案 4 :(得分:0)

据说:如果需要确切的结果,请不要使用doublefloat您应该更喜欢BigDecimal。原语不会使用大多数人所期望的舍入模式。