我如何从java中的整数中获取double值?

时间:2013-02-06 02:20:22

标签: java integer

因此,我正在努力弄清楚如何正确地获得价值。所有的数学都是正确的,但它只是说明整数。例如,当我输入数字87,42和94时,平均值应该重复74.3。然而它对我来说只有74.0。最低分的平均值也是如此。

Scanner keyboard = new Scanner(System.in);

int a;
int b;
int c;
double grade;
double avg;
double avg2 = 0;

System.out.print("Enter score number 1: ");
a = keyboard.nextInt();
System.out.print("Enter score number 2: ");
b = keyboard.nextInt();
System.out.print("Enter score number 3: ");
c = keyboard.nextInt();

avg = ((a + b + c) / 3);


System.out.println("The average is: " + avg);

if (a < b && a < c)
{
    System.out.println("The lowest score was: " + a);
    System.out.println("The average without the lowest score is: " + ((b + c) / 2));
    avg2 = ((b + c) / 2);
}


if (b < a && b < c)
{
    System.out.println("The lowest score was: " + b);
    System.out.println("The average without the lowest score is: " + ((a + c) / 2));
    avg2 = ((a + c) / 2);
}


if (c < a && c < b)
{
    System.out.println("The lowest score was: " + c);
    System.out.println("The average without the lowest score is: " + ((a + b) /2));
    avg2 = ((a + b) / 2);
}

4 个答案:

答案 0 :(得分:2)

您必须将avg表达式的分子中的总和转换为double或在分母中使用double:

avg =((double)(a + b + c)/ 3);

avg =((a + b + c)/ 3.0 );

答案 1 :(得分:0)

当您使用右侧的所有int时,答案会在分配给int之前计算为double。这就是为什么你得到一个圆满的答案。

要修复,一个选项是为所有分母添加小数位,如此

avg = ((a + b + c) / 3.0d);

这将强制在double

中进行操作

答案 2 :(得分:0)

两个int之间的分隔将返回int。要导致返回double的除法,其中一个操作数必须是double,如下所示:

avg = ((a + b + c) / 3.0);

答案 3 :(得分:0)

这就是运营商在Java中的工作方式。如果你有任何算术运算,比如除法,其中两个操作数都是整数,那么运算符将产生一个整数。在这种分工操作中可能会丢失一些信息。

在您的情况下,虽然您将结果赋值给double类型的变量,但在除法运算符完成后执行赋值运算符。

如果您不想丢失信息,可以将任何操作数类型转换为所需类型(在您的情况下,加倍)。

avg = (double)(a + b + c) / 3;

或者

avg = (a + b + c) / (double)3;

现在,在上面的语句中,除法运算符有两个不同类型的操作数。因此结果将是两者中优越的类型。