java程序使用int和double

时间:2013-05-02 09:31:13

标签: java int double

我编写了一个简单的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

请帮助我理解这一点。

7 个答案:

答案 0 :(得分:12)

i1/i2将为0.由于i1i2都是整数。

如果您有int1/int2,如果答案不是完整的整数,则小数点后的数字将被删除。在您的情况下,2/5为0.4,因此您将获得0。

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

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

答案 1 :(得分:5)

当转换为int时,

i1/i2给出0. ie。为什么你得到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);
        }

答案 2 :(得分: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 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

答案 3 :(得分:2)

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

如果您将i1i2投射到double,那么它会提供所需的输出。

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

答案 4 :(得分:1)

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

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

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

答案 5 :(得分: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被转换为double,将被i2除,结果将为double,因此结果将为5.4

答案 6 :(得分:0)

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