5

我编写了一个简单的 Java 程序,如下所示:

public class Test {

    public static void main(String[] args) {
        int i1 =2;
        int i2=5;
        double d = 3 + i1/i2 +2;
        System.out.println(d);
    }
}

由于变量d被声明为 double 我期待这个程序的结果是,5.4但我得到的输出为5.0

请帮助我理解这一点。

4

7 回答 7

13

i1/i2将为 0。因为i1i2都是整数。

如果你有int1/int2,如果答案不是一个完美的整数,小数点后的数字将被删除。在你的情况下,2/5是 0.4,所以你会得到 0。

您可以转换i1i2转换double(另一个将被隐式转换)

double d = 3 + (double)i1/i2 +2;

于 2013-05-02T09:31:53.567 回答
5

i1/i2当转换为 int 时给出 0。即。为什么你得到 5.0。试试这个 :

 public static void main(String args[])
    {
            int i1 =2;
            int i2=5;
            double d = 3 + (double)i1/(double)i2 +2;
            System.out.println(d);
        }
于 2013-05-02T09:33:59.697 回答
3

这条线是分部分完成的:

double d = 3 + i1/i2 +2;

double d = 3 + (i1/i2) +2;
double d = 3 + ((int)2/(int)3) +2;
double d = 3 + ((int)0) +2;
double d = (int)5;
double d = 5;

double 只是意味着答案将被转换为 double,在计算答案之前它没有任何影响。你应该写

double d = 3d + (double)i1/i2 +2d; //having one double in each "part" of the calculation will force it to use double maths, 3d and 2d are optional
于 2013-05-02T09:34:54.647 回答
2

i1/i2将为 0,因为i112都是整数。

如果你投i1or i2double那么它将给出所需的输出。

double d = 3 + (double)i1/i2 +2;
于 2013-05-02T09:42:00.013 回答
1

此链接提供有关数据类型转换的信息,包括隐式和显式类型。

要提供问题的确切答案将是:

double d = 3 + (double)i1/i2 + 2
于 2013-05-02T09:38:30.733 回答
1
int i1 =2;
int i2=5;
double d = 3 + (double)i1/(double)i2 +2;

如果 i1/i2 将是小数值,则 double 将帮助它以小数形式而不是 int。所以现在你会得到你想要的结果。或者您也可以使用以下代码 double d = 3+(double)i1/i2+2; 在这一行中,i1 被转换为双精度,它将与 i2 相除,结果将是双精度,所以结果将再次为 5.4

于 2013-05-02T09:55:07.970 回答
0

由于 i1=2 和 i2=5 是整数类型,当您将它们除以 (2/5) 时,它会给出整数值 (0),因为小数部分 (.4) 会被丢弃。所以把 (double)i1/i2 放在等式上。

于 2013-05-02T10:13:01.953 回答