我编写了一个简单的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
请帮助我理解这一点。
答案 0 :(得分:12)
i1/i2
将为0.由于i1
和i2
都是整数。
如果您有int1/int2
,如果答案不是完整的整数,则小数点后的数字将被删除。在您的情况下,2/5
为0.4,因此您将获得0。
您可以将i1
或i2
投射到double
(另一个将被隐式转换)
double d = 3 + (double)i1/i2 +2;
答案 1 :(得分:5)
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,因为i1
和12
都是整数。
如果您将i1
或i2
投射到double
,那么它会提供所需的输出。
double d = 3 + (double)i1/i2 +2;
答案 4 :(得分:1)
答案 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放在等式上。