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;