如何使用Java将float转换为int
我使用下面这行将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
)
-
轮(给定的浮点数最接近的整数)
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)
,在这种情况下(按照doc),它和Math.Round
完全一样。
理论上你可以使用Math.rint(f)
来进行舍入,但rint
不会Math.rint(f)
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)
然后types后将其转换为整数。
float a = 8.61f; int b = (int)Math.round(a);
Math.round也返回一个整数值,所以你不需要types转换。
int b = Math.round(float a);