如何使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 }