2010-06-11 2 views
3

Почему так трудно узнать?Android Float To Int

public boolean onTouch(View v, MotionEvent event) 

Мне нужно преобразовать float event.getY() в инт.

Возможно ли это?

event.getY().intValue() не будет работать вообще.

Любые идеи?

ответ

17

Уххх, да, как насчет:

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

Вы видите getY() возвращает только поплавок для устройств, которые имеют точность субпиксельное.

+0

Он всегда возвращает поплавок. Может быть, вы имеете в виду, что float представляет целое число? –

+3

Правильно. На устройствах, которые не имеют субпиксельной точности, float всегда что-то вроде 235.0. Вы можете просто передать в int значение пикселя. – CaseyB

+0

Спасибо, что сработали. – shaneburgess

0

Просто брось:

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

Это действительно комментарий, а не ответ на вопрос. Пожалуйста, используйте «добавить комментарий», чтобы оставить отзыв для автора. – Gaffi

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)? –

+0

Результат зависит от значения 'some_float'. Если он имеет 1 десятичный знак после точки, например 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 –

+0

Я не вижу проблемы. Я ожидаю, что 1.46 будет округлено до 1, так как оно меньше 1,5. –

0

Math.round() округляет поплавок до ближайшего целого числа.