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


81

我有两个整数xy。我需要计算x/y,作为结果,我想浮动。例如,作为结果,3/2我希望得到1.5。我认为,最简单的(或唯一的)的方式来做到这一点是转换xy成float类型。不幸的是,我找不到简单的方法。你能帮我吗?


7
浮点数=((float)x)/ y?
mibollma 2010年



1
@VinAy:在这种情况下,我建议这样做。BigDecimal不是普遍正确的替代品float
马特·鲍尔

1
@VinAy:这完全取决于目的。如果他在做财务,那是正确的。如果他正在计算小行星的轨迹,那么事实并非如此。
罗恩侯爵,2010年

Answers:


151

你只需要操作数为浮点的至少一个:

float z = (float) x / y;

要么

float z = x / (float) y;

或(不必要)

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

这比以下方法更有效吗:float z =(1.0 * x)/ y; ?浮点转换在内部比乘法更有效吗?天哪!
MSquare

1
我不知道,但我认为99%或更多的时间都无关紧要。它甚至不会成为瓶颈。如果您真的很担心,请自己进行基准测试。
Matt Ball

1
第一个和第二个将在某些手臂设备上导致错误,请确保您都转换了两个整数。
奥利弗·迪克森

java.lang.Integer无法强制转换为java.lang.Float
Asp

2
@ user3002853阅读有关盒装类型与原始类型的信息。docs.oracle.com/javase/tutorial/java/data/autoboxing.html
Matt Ball,

5

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

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的评论。

float具有非常低的精度(6到7位数字),并且相当容易显示出明显的舍入误差。double的精度为9位。在99%的情况下,使用double代替float的成本是名义上的,但是由于舍入误差而导致的细微错误的成本要高得多。因此,许多开发人员建议完全不使用浮点,强烈建议使用BigDecimal。

但是我发现在大多数情况下,只要使用合理的舍入,就可以使用double。

在这种情况下,int x的精度为32位,而float的精度为24位,即使除以1也会产生舍入误差。另一方面,double具有53位的精度,这足以获得合理的精度。


6
您应该详细说明为什么 double比更好float
马特·鲍尔

5

您只需要将第一个值传递给float,然后再进行进一步的计算即可:

float z = x * 1.0 / y;

4

//我要转换的整数

int myInt = 100;

//将整数转换为浮点数

float newFloat = (float) myInt

1
至少在Android Studio中,编译器会抱怨尝试执行此操作的类型不兼容。
亚当·特纳

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为此,完全不需要使用包装器类型()。
马特·鲍尔

1
不要在帖子中使用签名或标语
meagar

1

Sameer:

float l = new Float(x/y)

将不起作用,因为它将先计算x和y的整数除法,然后从中构造一个浮点数。

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

在语义上是最佳候选人。


您的答案应该是评论。Sameer将不会收到您的帖子的通知。从语义上讲,在计算结果之前将两个int都转换为float是不必要的-因此,与仅转换一个int相比并没有更好。它给人的印象是错误的,因此,它不如恕我直言。
用户未知
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.