Как преобразовать float в int с Java

Я использовал следующую строку для преобразования float в int, но это не так точно, как хотелось бы:

 float a=8.61f;
 int b;

 b=(int)a;

Результат: 8 (Это должно быть 9)

Когда a = -7.65f, результат: -7 (Это должно быть -8)

Какой лучший способ сделать это?

Ответ 1

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

Ответ 2

На самом деле, есть разные способы уменьшить число с плавающей точкой до int, в зависимости от того, какого результата вы хотите достичь: (для int i, float f)

  • round (ближайшее целое число к заданному float)

    i = Math.round(f);
      f =  2.0 -> i =  2 ; f =  2.22 -> i =  2 ; f =  2.68 -> i =  3
      f = -2.0 -> i = -2 ; f = -2.22 -> i = -2 ; f = -2.68 -> i = -3
    

    примечание: по контракту оно равно (int) Math.floor(f + 0.5f)

  • усечь (то есть отбросить все после десятичной точки)

    i = (int) f;
      f =  2.0 -> i =  2 ; f =  2.22 -> i =  2 ; f =  2.68 -> i =  2
      f = -2.0 -> i = -2 ; f = -2.22 -> i = -2 ; f = -2.68 -> i = -2
    
  • ceil/floor (целое число всегда больше/меньше заданного значения , если имеет дробную часть)

    i = (int) Math.ceil(f);
      f =  2.0 -> i =  2 ; f =  2.22 -> i =  3 ; f =  2.68 -> i =  3
      f = -2.0 -> i = -2 ; f = -2.22 -> i = -2 ; f = -2.68 -> i = -2
    
    i = (int) Math.floor(f);
      f =  2.0 -> i =  2 ; f =  2.22 -> i =  2 ; f =  2.68 -> i =  2
      f = -2.0 -> i = -2 ; f = -2.22 -> i = -3 ; f = -2.68 -> i = -3
    

Для округления положительных значений вы также можете просто использовать (int)(f + 0.5), который в этих случаях работает точно так же, как Math.Round (согласно документу).

Вы также можете использовать Math.rint(f) для округления до ближайшего четного целого числа; возможно, это полезно, если вы планируете иметь дело с большим количеством операций с дробной частью, строго равной .5 (обратите внимание на возможные проблемы округления IEEE), и хотите сохранить среднее значение набора на месте; Вы будете вводить другое смещение, где четные числа будут более распространенными, чем нечетные.

См

http://mindprod.com/jgloss/round.html

http://docs.oracle.com/javase/6/docs/api/java/lang/Math.html

для получения дополнительной информации и некоторых примеров.

Ответ 3

Math.round(value) округлить значение до ближайшего целого числа.

Используйте

1) b=(int)(Math.round(a));

2) a=Math.round(a);  
   b=(int)a;

Ответ 4

Используйте Math.round(value), затем после того, как тип передал его целому числу.

float a = 8.61f;
int b = (int)Math.round(a);

Ответ 5

Math.round также возвращает целочисленное значение, поэтому вам не нужно выводить тип.

int b = Math.round(float a);

Ответ 6

Как по мне, проще: (int) (a +.5) //a это Float. Вернуть округленное значение.

Не зависит от типов Java Math.round()