2013-11-03 90 views
0
import java.util.Scanner; 

public class test { 

    private static int number1 = 100; 
    private static int number2 = 1; 

    public static double avgAge() { 

     return (number1 + number2)/2; 
    } 

    public static void main(String[] args) { 

     System.out.println("Average number: " + test.avgAge()); 
    } 
} 

为什么test.avgAge()= 50.0而不是50.5?有没有办法输出50.5呢?公共静态双重方法?

回答

3

该计算以整数计算完成。

如果你将2替换为2.0,你会得到50.5。我建议为该行添加评论以向未来的读者解释这一点。 或者你可以明确地转换为双:

((double) (number1 + number2))/2 
-2
return ((double)(number1 + number2))/2; 
2

只需更换该功能

import java.util.Scanner; 

public class test { 

private static int number1 = 100; 
private static int number2 = 1; 

public static double avgAge() { 

    return (number1 + number2)/2.0; 
} 

public static void main(String[] args) { 

    System.out.println("Average number: " + test.avgAge()); //Average number: 50.5 
} 
} 
0

这是因为你使用ints通过了计算返回它作为一个double之前。请执行以下操作:

private static double number1 = 100.0; 
private static double number2 = 1.0; 

将这些更改为double。此外,改变2到2.0:

return (number1 + number2)/2.0; 

了解更多关于intsdoubles这里:

http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html

0

这是因为类型的推广。

如果在某个操作中,任何操作数都是双精度型,则结果会提升为double。

由于此处所有操作数都是整数,所以除法结果为int。

Type Promotion