我遇到了这段代码的问题。
我有两个变量int i
和float f
。
int i = 23;
float f = i/10;
我认为f
变量中的值应为2.3
但f
中的实际输出值为2.0
为什么结果会像这样发生,如何获得浮点值2.3
答案 0 :(得分:12)
float f = i/10
使用整数运算(分子和分母都是整数)。然后将结果提升为float
类型。
如果你这样做
float f = i/10f
然后你将强制浮点运算(分母现在是非整数)。连续f
表示10f
被视为浮点。指定10.0
或10d
表示加倍。
答案 1 :(得分:5)
输出为2.0f,因为分子和分母都是整数,因此它使用整数运算。
i/10
返回2
,在float
进行类型转换后转换为2.0f
。
您需要将至少一个数字/分母强制转换为float
以进行FP划分
int i = 23;
float f = (float)i/10;
或
float f = i/10f;
可能的方法。
float z = (float) x / y;
或
float z = x / (float) y;
或(不是必需的)
float z = (float) x / (float) y;
答案 2 :(得分:0)
请尝试
而不是你的
i/10
使用
i/1Of
答案 3 :(得分:0)
您可以将其视为两步操作
int i = 23;
int tmp = i/10;
// tmp = 2
float f = (float) tmp;
// f = 2.0f
这就是它在字节码中的样子
L0 //int i = 23;
BIPUSH 23
ISTORE 1 // var 1 is 'i'
L1 // int tmp = i/10;
ILOAD 1
BIPUSH 10
IDIV // integer division
ISTORE 2 // var 2 - is tmp
L2 // float f = (float) tmp;
ILOAD 2
I2F // (float) tmp
FSTORE 3 // var 3 is 'f'
答案 4 :(得分:0)
int i = 1;
float f = (float) i;