如何使用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);