如何在Java中将整数转换为浮点数

5

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

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

int i = 23;

float f = i/10;

我认为f变量中的值应该是2.3

但实际输出的f值为2.0

为什么会出现这样的结果,我该如何得到浮点值2.3


2
float f = (float)i/10; - Mysticial
5个回答

12

float f = i/10

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

如果您执行

float f = i/10f

那么您将会强制使用浮点运算(此时分母不再是整数)。连续的f表示10f被视为浮点数。指定10.010d则表示双精度。


1
你将会得到 double (和编译错误),而不是 float。应该是 i/10f。 - Dmitry Zaytsev
糟糕,谢谢你。现在已经纠正了。 - Brian Agnew

5

输出结果为2.0f,因为分子和分母都是整数,所以使用了整数算术。

i/10返回2,当强制转换为float时,变成了2.0f

您需要将分子或分母至少强制转换为float,以进行浮点数除法。

int i = 23;

float f = (float)i/10; 

或者

float f = i/10f; 

这是可能的方法。
float z = (float) x / y;

或者

float z = x / (float) y;

or(not required)

float z = (float) x / (float) y;

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'

0
int i = 1;
float f = (float) i;

0

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接