可以理解的是:
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?还请检查我是否正确理解了前两个。
感谢。
我得到了答案。感谢所有帮助过的人。
答案 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;
一步一步:
如果你想要浮点除法 - 只需要划分浮点数:
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;
}