2013-07-26 206 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)