2013-11-03 119 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