如何使用Java将float转换为int

Fra*_*ank 329 java floating-point int

我使用以下行将float转换为int,但它并不像我想的那样准确:

 float a=8.61f;
 int b;

 b=(int)a;
Run Code Online (Sandbox Code Playgroud)

结果是:( 8应该是9)

什么时候a = -7.65f,结果是:( -7应该是-8)

最好的方法是什么?

tw3*_*124 654

使用Math.round()将浮点数舍入到最接近的整数.

  • [`Math.round()`](http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/Math.html#round(float))返回`int`值,以便进行类型转换使用`(int)`是多余的. (81认同)
  • Solvek的答案是对的,但我想指出Math.round()可以根据输入有两种不同的输出类型.Math.round(double a)返回一个long.Math.round(float a)返回一个int.http://docs.oracle.com/javase/7/docs/api/java/lang/Math.html#round(double) (31认同)
  • 使用/或...``(int)foo`更简单. (5认同)
  • 与转换为(int)相比,Math.round()是一个缓慢的操作 (2认同)

vax*_*uis 183

实际上,有不同的方法可以将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
    
    Run Code Online (Sandbox Code Playgroud)

    注意:按合同,这是等于 (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
    
    Run Code Online (Sandbox Code Playgroud)
  • 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
    
    Run Code Online (Sandbox Code Playgroud)

对于舍入正值,您也可以使用(int)(f + 0.5),这与Math.Round那些情况完全相同(根据文档).

从理论上讲,你可以Math.rint(f)用来进行舍入,但i不会向上舍入0.5,它会向上或向下舍入,无论哪个较低或较高的整数是偶数,所以在大多数情况下它都是无用的.

看到

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

http://docs.oracle.com/javase/6/docs/api/java/lang/Math.html

了解更多信息和一些例子.


SHU*_*RAN 14

Math.round(value) 将值四舍五入到最接近的整数.

使用

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

2) a=Math.round(a);  
   b=(int)a;
Run Code Online (Sandbox Code Playgroud)


小智 13

通过将原语传递给构造函数来实例化Float对象,然后使用您创建的对象返回原语。floatFloatint

解释
由于数字包装器类扩展了该类java.lang.Number,因此您可以使用该方法让任何数字包装器对象返回任何其他数字基元.<type>Value()类型。

脚步

  1. 创建一个浮动对象
  2. 使用该.intValue()方法返回一个原语int

例子

Float mFloat = Float.valueOf(8.65f);
int i = mFloat.intValue();
Run Code Online (Sandbox Code Playgroud)


小智 8

Math.round() 就足够了

int b = Math.round(a)
Run Code Online (Sandbox Code Playgroud)

这将完成工作


小智 5

Math.round(value)然后在将其强制转换为整数后使用.

float a = 8.61f;
int b = (int)Math.round(a);
Run Code Online (Sandbox Code Playgroud)


小智 5

Math.round还返回整数值,因此您无需进行类型转换。

int b = Math.round(float a);
Run Code Online (Sandbox Code Playgroud)

  • 其他答案已经说明了这一点。仅当您要添加新内容时,才添加新答案。(此外,Math.round不会返回int。) (12认同)