5

可能重复:
如何在 Java 中将整数转换为浮点数?

我遇到了这段代码的问题。我有两个变量int ifloat f

int i = 23;

float f = i/10;

我想f变量中的值应该是2.3

但实际输出f值为2.0

为什么结果会这样,我怎样才能得到浮点值2.3

4

5 回答 5

12

float f = i/10

正在使用整数算术(分子和分母都是整数)。然后将结果提升为一种float类型。

如果你这样做

float f = i/10f

然后你将强制浮点运算(分母现在是非整数)。连续f表示10f被视为浮点数。指定10.0or10d表示双精度。

于 2012-12-24T11:08:48.920 回答
5

输出为 2.0f,因为分子和分母都是整数,因此它使用整数算术。

i/10返回2which 当类型转换为 时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;
于 2012-12-24T11:08:34.553 回答
0

请尝试代替您 i/10 使用 i/1Of

于 2012-12-24T11:12:51.113 回答
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'
于 2012-12-24T11:19:57.737 回答
0
int i = 1;
float f = (float) i;
于 2012-12-24T11:22:44.533 回答