it-swarm.com.ru

Как конвертировать float в int с помощью Java

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

 float a=8.61f;
 int b;

 b=(int)a;

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

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

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

295
Frank

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

618
tw39124

На самом деле, есть разные способы уменьшить число с плавающей точкой до 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) для округления, но rint не округляет 0.5 вверх, он округляет его вверх или вниз, в зависимости от того, какое из нижних или верхних целых является четным, поэтому в большинстве случаев бесполезно.

Увидеть

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

http://docs.Oracle.com/javase/6/docs/api/Java/lang/Math.html

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

173
vaxquis

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

Использование 

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

2) a=Math.round(a);  
   b=(int)a;
13
SHUNMUGA RAJ PRABAKARAN

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

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

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

int b = Math.round(float a);
4
venkat

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

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

0
Bruno L.