2010-06-11 122 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()将浮动四舍五入到最接近的整数。