如何使2整数的划分产生一个浮点数,而不是另一个int?

在计算速度的另一个布鲁斯·埃克尔斯运动中, v = s / t ,其中s和t是整数。 我该如何做到这一点,所以师发现了一个浮动?

 class CalcV { float v; float calcV(int s, int t) { v = s / t; return v; } //end calcV } public class PassObject { public static void main (String[] args ) { int distance; distance = 4; int t; t = 3; float outV; CalcV v = new CalcV(); outV = v.calcV(distance, t); System.out.println("velocity : " + outV); } //end main }//end class 

只需将两个操作数中的一个首先转换为浮点数。

 v = (float)s / t; 

演员优先于分组,所以在分组之前。

另一个操作数将被编译器有效地自动转换为浮点数,因为规则说如果任一操作数是浮点类型,那么操作将是浮点操作,即使其他操作数是整数。 Java语言规范,§4.2.4和§15.17

尝试:

 v = (float)s / (float)t; 

将这些整数转换成浮点数将允许进行浮点分割。

不过,你真的只需要投一个。

为了减少对代码可读性的影响,我建议:

 v = 1d* s/t; 

将其中一个整数转换为浮点数,以强制执行浮点数学运算。 否则整数数学总是首选。 所以:

 v = (float)s / t; 

你甚至可以只投其中一个,但为了一致性,你可能想要明确地投出两个,所以像v =(float)s /(float)t应该工作。

您可以将分子或分母强制浮动…

int操作通常返回int,所以你必须改变一个操作数。

将其中一个整数/两个整数都浮起来以强制该操作用浮点数Math完成。 否则整数数学总是首选。 所以:

 1. v = (float)s / t; 2. v = (float)s / (float)t; 

JLS标准

JLS 7 15.17.2。 司司长/说:

整数部分向0

这就是为什么1/2不给浮子。

只要将其中一个浮点数转换为浮点数就足够了,因为15.17。 乘法运算符说:

在操作数上执行二进制数字提升

和5.6.2。 二进制数字促销说:

  • 如果其中一个操作数的类型是double,另一个则转换为double。
  • 否则,如果任一操作数的类型为float,则另一个操作数转换为float

尝试这个:

 class CalcV { float v; float calcV(int s, int t) { float value1=s; float value2=t; v = value1 / value2; return v; } //end calcV }