整数划分及其分配

时间:2013-08-15 06:24:50

标签: java floating-point integer double

可以理解的是:

  public int divide() {

  return 23/4; /* gives 5 , implicitly typecasting 5.75 to 5 ,due to 23 and 4 being
                  both integers ,at least I think this is */
  }

还有,

public double divide() {

  return 23.0/4.0; /*gives 5.75 , since it takes 23.0 and 4.0 to be float and not int*/

}

我有一个代码:

public double divide() {

  double intger = 23/4;
  return intger;

}

在其中,为什么即使我将23/4指定为双倍,我得到的只是5.0?还请检查我是否正确理解了前两个。

感谢。

编辑:

我得到了答案。感谢所有帮助过的人。

6 个答案:

答案 0 :(得分:4)

23/4是一个int,然后隐式转换为double。编辑:试试这个

System.out.println(23/4);
System.out.println((double)(23/4));
System.out.println((double)23/(double)4);

答案 1 :(得分:2)

int / int = int所以你为一个double分配了一个整数。首先,你应该得到一个双倍价值。

试试这个:

public double divide() {

  double toret = 23/4.0;
  return toret;

}

答案 2 :(得分:2)

表达式23/4是整数除法,并给出integer结果。

因此它的计算结果为5,然后将其分配给double

答案 3 :(得分:2)

双整数= 23/4;

一步一步:

  1. 23/4 - 整数除法,因为两个参数都是int;结果是5
  2. double intger = 5;需要转换,因为左侧值为 double ,而右侧值为 int ; int到double的转换可以是隐含的;所以intger = 5.0
  3. 如果你想要浮点除法 - 只需要划分浮点数:

      double intger = 23.0 / 4.0;
    

答案 4 :(得分:1)

23/4是一个整数.. 你已经在两个整数之间进行了除法,所以结果是一个整数.. 5 ,它存储为double 5.0 ..

如果您希望获得双值返回使用:

public double divide() {

  double intger = 23.0/4.0;
  return intger;

}

答案 5 :(得分:1)

在你的第一个例子中,23/4返回5,因为这是整数除法的作用:p / q返回最大整数i,使得i * q <= p。这里没有施法!

在你的第二个例子中,23.0 / 4.0返回5.75,因为这是浮点除法的工作原理:当p和q是浮点数时,p / q返回f的最精确表示,使得f * q = p。

如果您不考虑,23.0 / 4也将返回5.75。在这种情况下,有铸造。由于p和q具有不同的类型,float和int,所以在不损失精度的情况下提升较低类型,并且除法继续进行,就像p和q一直是较高类型一样。

在您关注的情况下,始终可以使用int为较高类型的变量(long,float或double)赋值。这里发生的是整数除法,然后是推广。

为了强制浮点除法,将p或q中的一个转换为浮点:

public double divide(int p, int q) {

  return  (double)p/q;
}