float/int隐式转换

Ric*_*ich 21 java math floating-point

我正在做floats和ints的乘法和除法,我忘记了隐含的转换规则(问题中的单词看起来太模糊了,谷歌比在这里要求更快).

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

Dam*_*ash 33

您不能通过inta float的划分来分配结果,int反之亦然.

所以答案是:

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

一个演员就足够了.

如果我乘以a float和an int,答案是float什么?

是的.


float f = 1000f;
int i = 3; 

f = i; // Ok
i = f; // Error

f = i/f; //Ok 0.003
f = f/i; //Ok 333.3333(3)

i = i/f; //Error
i = f/i; //Error
Run Code Online (Sandbox Code Playgroud)


Boz*_*zho 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);
Run Code Online (Sandbox Code Playgroud)

结果:

2.5
2 
2.5
Run Code Online (Sandbox Code Playgroud)


Mat*_*all 7

为了使用整数执行任何类型的浮点运算,您需要将至少一个操作数转换(读取:强制转换)为一个float类型.


bli*_*sta 7

如果二元运算符的至少一个操作数是浮点类型,则操作是浮点运算,即使另一个是整数.

(来源:Java语言规范 - 4.2.4)

如果我乘以一个浮点数和一个int,答案是浮点数吗?

System.out.println(((Object)(1f*1)).getClass());//class java.lang.Float
Run Code Online (Sandbox Code Playgroud)

(如果你使用DrJava,你只需在交互面板中键入((Object)(1f*1)).getClass().还有一个DrJava for Eclipse的插件.)


use*_*421 6

简单的答案是Java会自动执行扩展转换但不会缩小转换范围.所以例如int-> float是自动的,但float-> int需要一个强制转换.