2013-02-06 29 views
0

因此,我很难找出如何使值正确出来。所有的数学都是正确的,但它只是表示整个数字。例如,当我输入数字87,42和94时,平均值应该重复74.3。但它只对我而言是74.0。最低分的平均值也一样。我将如何从java中的整数获得double值?

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); 
} 
+0

您是否尝试在计算中用“3.0d”或“2.0d”而不是“3”或“2”进行划分? – JScoobyCed

+0

@JScoobyCed你不需要'3.0'后面的'd'因为'3.0'已经是双倍的了 –

回答

0

当您使用所有int S于右侧,然后将其分配给double答案被计算为int。这就是为什么你得到一个四舍五入的答案。

要解决,一个选项是小数添加到您的所有分母像这样

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

这将迫使操作double

+0

我完全忘记了只要在最后加上一个“.0”就能解决这个问题....谢谢! ! – user2045235

0

一个部门发生2个int S之间将返回int 。为了使返回double师,其中一个操作数必须是double,像这样:

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

你必须投总和在你的魅力表达的分子为双或在分母中使用双:

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

平均=((A + B + C)/ 3.0);

0

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

在你的情况下,尽管你将结果赋给一个double类型的变量,赋值运算符在除法运算符完成后执行。

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

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

或者

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

现在,在上述声明,除法运算符有两个不同类型的操作数。所以这两种类型的结果将是优越的。