Как преобразовать float в int в Java
я использовал следующую строку для преобразования float в int, но это не так точны, как хотелось бы:
float a=8.61f;
int b;
b=(int)a;
результат : 8
(Он должен быть!--2-->)
, когда a = -7.65f
результат : -7
(Он должен быть!--5-->)
какой лучший способ сделать это ?
6 ответов
на самом деле есть разные способы понизить float до 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
в этих случаях (согласно doc).
теоретически вы могли бы использовать Math.rint(f)
чтобы сделать закругления, но rint
не округляет 0.5 вверх, он округляет его вверх или вниз, в зависимости от того, какое из нижнего или высшего целого числа четное, поэтому оно бесполезно в большинстве случаи.
посмотреть
http://mindprod.com/jgloss/round.html
http://docs.oracle.com/javase/6/docs/api/java/lang/Math.html
для получения дополнительной информации и некоторые примеры.
Math.round(value)
округляют значение до ближайшего целого числа.
использовать
1) b=(int)(Math.round(a));
2) a=Math.round(a);
b=(int)a;
использовать Math.round(value)
затем после типа приведите его к integer.
float a = 8.61f;
int b = (int)Math.round(a);
математика.round также возвращает целочисленное значение, поэтому вам не нужно печатать.
int b = Math.round(float a);
Что касается меня, проще:(int) (a +.5) // a-это поплавок. Возвращает округленное значение.
не зависит от Java Math.круглые () типы