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 代替?

4

5 回答 5

3

计算是作为整数计算完成的。

如果将 2 替换为 2.0,您将得到 50.5。我建议在该行添加评论,以便向未来的读者解释这一点。或者,您可以显式转换为双精度:

((double) (number1 + number2)) / 2
于 2013-11-03T17:41:03.667 回答
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
}   
}
于 2013-11-03T17:43:05.643 回答
0

这是因为您ints在将其作为double. 请执行下列操作:

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

将这些更改为double. 此外,将 2 更改为 2.0:

    return (number1 + number2) / 2.0;

ints在此处阅读更多信息doubles

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

于 2013-11-03T18:59:00.510 回答
0

那是因为类型提升。

如果在操作中,任何操作数是双精度数,则结果将提升为双精度数。

因为这里所有的操作数都是整数,所以除法的结果是整数。

类型推广

于 2013-11-04T04:50:51.727 回答
-2
return ((double)(number1 + number2)) / 2;
于 2013-11-03T17:41:49.270 回答