Ответ 1
Использование Math.round()
будет округлять float до ближайшего целого числа.
Я использовал следующую строку для преобразования float в int, но это не так точно, как хотелось бы:
float a=8.61f;
int b;
b=(int)a;
Результат: 8
(Это должно быть 9
)
Когда a = -7.65f
, результат: -7
(Это должно быть -8
)
Какой лучший способ сделать это?
Использование Math.round()
будет округлять float до ближайшего целого числа.
На самом деле, есть разные способы уменьшить число с плавающей точкой до 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
для получения дополнительной информации и некоторых примеров.
Math.round(value)
округлить значение до ближайшего целого числа.
Используйте
1) b=(int)(Math.round(a));
2) a=Math.round(a);
b=(int)a;
Используйте Math.round(value)
, затем после того, как тип передал его целому числу.
float a = 8.61f;
int b = (int)Math.round(a);
Math.round также возвращает целочисленное значение, поэтому вам не нужно выводить тип.
int b = Math.round(float a);
Как по мне, проще: (int) (a +.5) //a это Float. Вернуть округленное значение.
Не зависит от типов Java Math.round()