2013-07-26 166 views
1

我来自Python背景并潜入Java世界。 我想在Java中将Float转换为int。这是我们在Python int_var = int(float_var) 将float转换为int

 
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 

+0

你知道基本数据类型以及他们与包装类型与整数区别,即int和float与浮动?你为什么使用包装类型而不是基元?你不应该。 –

+0

好吧,猜猜我在那里感到困惑。 – Anirudh

+0

通常,除非需要一个对象(例如,可以存储在一个集合中)或一个可为空的基元,否则不要使用包装类型。原始类型更快,更安全。您发布的代码中没有理由使用包装类型。 –

回答

4

使用原语的类型,你将被罚款:

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

a = (int)b; 

原因它不适用于包装是那些类型是非协变的,因此是不相容的。


如果您正在使用Integer类型(你真的不需要在这里),那么你不应该创建一个使用new包装类型的对象。只是使自动装箱功能的使用:Java 1.5的后

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

上述分配工作,从int原始社会到Integer包装进行自动装箱。它还使JVM能够使用缓存的Integer文字(如果可用),从而防止创建不必要的对象。

+0

'float b = 3.14f'。什么是'f'后缀的需要? – Anirudh

+1

浮点文字'3.14'默认为'double'。对于float,它是'3.14f'。 –

+0

使其编译。 3.14是一个双。 –

5

这就是在Java中烦人的事情之一。这个解决您的问题:

a = (int)(float)b; 

拆箱会要求你从Float转换为float再到int

6

你可以不喜欢它

a = b.intValue() 
0

使用Math.round方法: -

int a = Math.round(b); 
3

由于您使用的盒装原始的,a = b.intValue();应该满足您的需求。

+0

好吧,这是更pythonic! – Anirudh

+0

@Anirudh。那么,* Pythonic *是用于Python代码,而不是Java。 –

+1

是的!,我的意思是说上面的代码更像python,因此pythonic – Anirudh

1
float a =10.0f; 
int k=(int)a; 
0

的永远是最好的使用方法:

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

这些都是为了转换。

0

你可以简单的使用用途Math.round()为,

int a = Math.round(14.32f)