float / int隐式转换

时间:2010-11-04 14:32:49

标签: java floating-point math

我正在进行floatint s的乘法和除法,我忘记了隐式转换规则(问题中的单词看起来太模糊了,谷歌比这里要求的要快得多)。

如果我有两个int,但我想进行浮点除法,我是否只需要转换一个或两个操作数?乘法怎么样 - 如果我乘以floatint,答案是float

6 个答案:

答案 0 :(得分:33)

您无法通过int分配float的{​​{1}}结果,反之亦然。

所以答案是:

  

如果我有两个int,但我想做浮点除法......?

一次演员就足够了。

  

如果我乘以intfloat,答案是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之外的intdouble之间的操作 - 如有必要 - 将结果转换为float。我发现双重拼接的要求令人讨厌,但Java中的类型转换规则要求使用恼人的双重演员或者精度损失。