java中如何从整数中获取浮点值
可能重复:java中如何从整数中获取浮点值,java,Java,可能重复: 这个代码有问题。 我有两个变量inti和float f int i=23 浮动f=i/10; 我假设f变量中的值应该是2.3 但是f中的实际输出值是2.0 为什么会出现这样的结果,以及如何获得浮点值2.3由于分子和分母都是整数,所以输出为2.0f,因此使用整数算法 i/10返回2,当键入到float时,将其转换为2.0f 您需要将至少一个num/分母键入到float以进行FP除法 int i = 23; float f = (float)i/10; 或 可能的方法 flo
这个代码有问题。 我有两个变量
inti
和float f
int i=23
浮动f=i/10;
我假设f
变量中的值应该是2.3
但是f
中的实际输出值是2.0
为什么会出现这样的结果,以及如何获得浮点值
2.3
由于分子和分母都是整数,所以输出为2.0f,因此使用整数算法
i/10
返回2
,当键入到float
时,将其转换为2.0f
您需要将至少一个num/分母键入到float
以进行FP除法
int i = 23;
float f = (float)i/10;
或
可能的方法
float z = (float) x / y;
或
或(不需要)
float f=i/10
使用整数运算(分子和分母都是整数)。然后将结果提升为float
类型
如果你这样做
float f = i/10f
然后强制执行浮点运算(分母现在是非整数)。连续的f
表示10f
被视为浮点。指定10.0
或10d
表示双精度。请尝试
而不是你的
i/10
使用
<代码> I/COD> < P>你可以认为它是一个2步操作< /P>
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'
float f=(float)i/10
您将得到双精度(和编译器错误),而不是浮点。应该是i/10FW箍。谢谢。现在更正谢谢你的回答和解释。
float f = i/10f
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'
int i = 1;
float f = (float) i;