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

请帮助我理解这一点。

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

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

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

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

i1/i2转换为int时给出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); } 

这一行是部分完成的:

 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 

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

如果你将i1i2double那么它将提供所需的输出。

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

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

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

 double d = 3 + (double)i1/i2 + 2 
 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

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