我正在进行float
和int
s的乘法和除法,我忘记了隐式转换规则(问题中的单词看起来太模糊了,谷歌比这里要求的要快得多)。
如果我有两个int
,但我想进行浮点除法,我是否只需要转换一个或两个操作数?乘法怎么样 - 如果我乘以float
和int
,答案是float
?
答案 0 :(得分:33)
您无法通过int
分配float
的{{1}}结果,反之亦然。
所以答案是:
如果我有两个
int
,但我想做浮点除法......?
一次演员就足够了。
如果我乘以
int
和float
,答案是int
吗?
是的。
float
答案 1 :(得分:11)
演示:
int i1 = 5;
float f = 0.5f;
int i2 = 2;
System.out.println(i1 * f);
System.out.println(i1 / i2);
System.out.println(((float) i1) / i2);
结果:
2.5
2
2.5
答案 2 :(得分:7)
为了使用整数执行任何类型的浮点运算,您需要将至少一个操作数转换(读取:强制转换)为float
类型。
答案 3 :(得分:7)
如果至少有一个操作数到 二元运算符是浮点数 类型,然后操作是 浮点运算,即使是 其他是完整的。
(资料来源:Java language specifications - 4.2.4)
如果我将float和int相乘,那么答案是浮点数吗?
System.out.println(((Object)(1f*1)).getClass());//class java.lang.Float
(如果你使用DrJava,你只需在交互面板中键入((Object)(1f * 1))。getClass()。还有一个DrJava for Eclipse的插件。)
答案 4 :(得分:5)
简单的答案是Java会自动执行扩展转换,但不会缩小转换范围。因此,例如int-> float是自动的,但float-> int需要强制转换。
答案 5 :(得分:0)
Java按int < long < float < double
的顺序对基本类型进行排名。如果运算符与不同的基本类型一起使用,则在上面列表中出现在另一个之前的类型将隐式转换为另一个,而不进行任何编译器诊断,即使在这会导致精度损失的情况下也是如此。例如,16777217-1.0f
将产生16777215.0f(比正确值小1)。在许多情况下,应该通过将float
转换为int
,执行操作,然后执行操作,执行范围+/- 16777216之外的int
和double
之间的操作 - 如有必要 - 将结果转换为float
。我发现双重拼接的要求令人讨厌,但Java中的类型转换规则要求使用恼人的双重演员或者精度损失。