1

我来自 Python 背景并潜入 Java 世界。我正在尝试在 Java 中将 Float 转换为 int。我们在 Python 中这样做int_var = int(float_var)

public class p1 {
    public static void main(String args[]) {
        Integer a = new Integer(5);
        Float b;
        b = new Float(3.14);
        a = (int)b;
        System.out.println(a);
    }
}
产生以下错误 -
p1.java:7: error: inconvertible types
        a = (int)b;
                 ^
  required: int
  found:    Float
1 error

4

9 回答 9

6

你可以这样做

a = b.intValue()
于 2013-07-26T06:52:19.720 回答
5

这是Java中令人讨厌的事情之一。解决您的问题:

a = (int)(float)b;

拆箱将要求您从 to 投射Floatfloat然后到int

于 2013-07-26T06:51:00.727 回答
4

使用原始类型,你会没事的:

int a = 5;
float b = 3.14f;  // 3.14 is by default double. 3.14f is float.

a = (int)b;

它不适用于Wrappers的原因是这些类型是非协变的,因此不兼容。


如果您使用的是Integer类型(这里真的不需要),那么您不应该使用new. 只需使用自动装箱功能:

Integer a = 5;  // instead of `new Integer(5);`

上述分配在 Java 1.5 之后工作,执行从int原始到Integer包装器的自动装箱。它还使 JVM 能够使用缓存的整数文字(如果可用),从而防止创建不必要的对象。

于 2013-07-26T06:51:52.253 回答
3

由于您使用的是盒装原语,a = b.intValue();因此应该适合您的需求。

于 2013-07-26T06:53:19.807 回答
1
 float a =10.0f;
 int k=(int)a;
于 2013-07-26T06:53:50.773 回答
1

使用此代码
a = b.intValue();

于 2013-07-26T06:53:55.037 回答
0

为了获得最佳效果,请始终使用:

Math.floor(d)
Math.round(d)
Math.abs(d)

这些用于转换。

于 2013-07-26T06:57:34.337 回答
0

使用Math.round方法:-

int a = Math.round(b);
于 2013-07-26T06:52:35.940 回答
0

您可以简单地使用 Use Math.round()作为,

   int a = Math.round(14.32f)
于 2013-07-26T07:06:25.553 回答