2010-06-11 125 views
3

爲什麼這麼難找到?Android Float To Int

public boolean onTouch(View v, MotionEvent event) 

我需要將float event.getY()轉換爲int。

這可能嗎?

event.getY().intValue()根本不起作用。

任何想法?

回答

17

唔,嗯,怎麼樣:

int y = (int)event.getY(); 

你看getY()只返回一個float用於具有子像素精度的設備。

+0

它總是返回一個浮點數。也許你的意思是浮點數表示一個整數? – 2010-06-11 16:54:21

+3

正確。在沒有亞像素精度的設備上,浮點數總是類似於235.0。你可以投射到一個int來獲得像素值。 – CaseyB 2010-06-11 17:02:15

+0

感謝這工作。 – shaneburgess 2010-06-11 21:14:53

0

只投它:

int val = (int)event.getY(); 
+0

這真的是一個評論,而不是問題的答案。請使用「添加評論」爲作者留下反饋。 – Gaffi 2012-08-22 14:24:40

2

使用

Math.round(yourFloat);

優於

(int)yourFloat;

這是所有關於精度。如果您使用(int),您將在刪除點後獲得數字。如果您使用Math,則會得到一個舍入數字。例如,如果您嘗試對3.1進行舍入,那麼這兩種方法都會產生相同的結果 - 3.

但是取3.9或3.8。這實際上是4,但

(int)3.9 = 3

Math.round(3.9) = 4

+0

怎麼樣(int)(some_float + 0.5)? – 2015-12-25 23:10:56

+0

結果取決於'some_float'的值。如果它在點之後有一個小數點,例如x.5到x.9,那麼結果將是x + 1'(x.5 + 0.5 = x + 1)',如果x.0到x.04 - 只是x' (x.4 + 0.5 = x.9)'。但是,這仍然不會像Math.round一樣工作。 1.46 + 0.5 = 1.96。 (int)1.96 = 1.在這種情況下,要獲得精確的結果,您需要具有some_float + 0.5555555555 ... infinity – 2015-12-26 10:36:59

+0

我沒有看到問題。我預計1.46會小於1.5,因此會被舍入爲1。 – 2015-12-26 23:57:39

0

Math.round()將浮動四捨五入到最接近的整數。