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

105

我有两个整数 xy。我需要计算 x/y 并得到一个浮点数结果。例如,对于 3/2 的计算结果,我希望得到 1.5。我认为最简单(或者唯一)的方法是将 xy 转换为浮点类型。不幸的是,我找不到一个简单的方法来实现这个转换。请问能否帮助我解决这个问题呢?


8
变量result的类型为浮点型,它的值是将变量x强制转换成float类型后除以变量y得到的结果。 - mibollma
看这个:http://xahlee.org/java-a-day/casting.html - fasseg
2
可能是Java:两个整数相除得到整数?的重复问题。 - dogbane
1
@VinAy:在这种情况下,我不建议使用BigDecimal来替代float。因为BigDecimal并不是float的普遍正确替代品。 - Matt Ball
1
@VinAy:这完全取决于目的是什么。如果他从事金融方面,你是正确的。如果他计算小行星轨迹,你就不正确了。 - user207421
显示剩余4条评论
6个回答

181

你只需要将至少一个操作数转换为浮点数:

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

或(不需要的)

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

这比以下代码更有效吗: float z = (1.0 * x) / y; ?将浮点数转换为float类型在内部是否比乘法更有效率?谢谢! - MSquare
1
我不知道,但我认为它99% 或更多的时间都是不相关的。这甚至远远不会成为瓶颈。如果您真的那么担心,请自行进行基准测试。 - Matt Ball
1
第一个和第二个会在某些ARM设备上引起错误,请确保将两个整数都转换。 - Oliver Dixon
java.lang.Integer 无法转换为 java.lang.Float。 - a.s.p.
2
@user3002853 阅读有关包装类型和基本类型的内容。http://docs.oracle.com/javase/tutorial/java/data/autoboxing.html - Matt Ball

11

// 我想要转换的整数

int myInt = 100;

// 将整数转换为浮点数

float newFloat = (float) myInt

2
在Android Studio中,编译器会抱怨尝试执行此操作的不兼容类型。 - Adam R. Turner

7

除非必须使用,否则不应使用float。在99%的情况下,double是更好的选择。

int x = 1111111111;
int y = 10000;
float f = (float) x / y;
double d = (double) x / y;
System.out.println("f= "+f);
System.out.println("d= "+d);

打印

f= 111111.12
d= 111111.1111

根据@Matt的评论。

浮点数精度很低(6-7位数字),容易出现显著的舍入误差。双精度浮点数有另外9位数字的精度。在99%的情况下,使用双精度浮点数代替单精度浮点数的成本是可忽略的,然而由于舍入误差导致的微妙错误的成本要高得多。因此,许多开发人员建议不使用浮点数,强烈推荐使用BigDecimal。

然而,我发现在大多数情况下,只要使用合理的舍入,双精度浮点数就可以使用。

在这种情况下,int x具有32位精度,而float具有24位精度,即使除以1也可能存在舍入误差。另一方面,双精度浮点数具有53位精度,这已经足够得到一个相当准确的结果。


7
你应该阐述为什么doublefloat更好。 - Matt Ball

7

在进行进一步的计算之前,您只需要将第一个值转换为浮点数:

float z = x * 1.0 / y;

3

以下是您可以操作的步骤:

public static void main(String[] args) {
    // TODO Auto-generated method stub
    int x = 3;
    int y = 2;
    Float fX = new Float(x);
    float res = fX.floatValue()/y;
    System.out.println("res = "+res);
}

再见!


7
完全没有必要使用包装类型(Float)来实现这个。 - Matt Ball
1
请在您的帖子中不要使用签名或标语 - user229044

1

萨米尔:

float l = new Float(x/y)

这样做是行不通的,因为它首先会计算x和y的整数除法,然后再从中构造一个浮点数。

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

在语义上是最佳选择。


在计算结果之前将两个整数都转换为浮点数在语义上是不必要的,因此它并不比只转换一个整数更好。这会给人留下错误的印象,因此我认为这种方法是不如另一种方法的。 - user unknown

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