395

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

 float a=8.61f;
 int b;

 b=(int)a;

结果是:(8应该是9

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

最好的方法是什么?

4

9 回答 9

750

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

于 2009-08-18T17:41:55.913 回答
196

实际上,有不同的方法可以将 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),它的工作原理与这些情况完全相同Math.Round(根据文档)。

您还可以使用四舍五入Math.rint(f)最接近的偶数;如果您希望处理大量小数部分严格等于 0.5 的浮点数(注意可能的 IEEE 舍入问题),并且希望保持集合的平均值不变,那么它可以说是有用的;你会引入另一种偏见,虽然偶数比奇数更常见。

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

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

了解更多信息和一些示例。

于 2012-03-19T16:01:32.273 回答
16

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

利用

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

2) a=Math.round(a);  
   b=(int)a;
于 2012-11-29T06:57:33.533 回答
7

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

int b = Math.round(float a);
于 2015-03-04T01:57:04.417 回答
6

Math.round(value)然后在类型转换为整数之后使用。

float a = 8.61f;
int b = (int)Math.round(a);
于 2014-12-29T10:18:02.343 回答
5

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

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

脚步

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

例子

Float mFloat = Float.valueOf(8.65f);
int i = mFloat.intValue();
于 2021-07-13T05:08:52.490 回答
3

Math.round() 就足够了

int b = Math.round(a)

这将完成工作

于 2021-03-16T17:06:52.123 回答
1

如果要将浮点值转换为整数值,有几种方法可以做到这一点,具体取决于您要如何舍入浮点值。

第一种方法是对浮点值进行四舍五入:

float myFloat = 3.14f;
int myInteger = (int)myFloat;

此代码的输出将为 3,即使 myFloat 值更接近 4。

第二种方法是 ceil 舍入浮点值:

float myFloat = 3.14f;
int myInteger = Math.ceil(myFloat);

此代码的输出将为 4,因为舍入模式始终在寻找最大值。

于 2020-07-02T19:41:13.807 回答
-1

对我来说,更简单:(int) (a +.5) // a 是一个浮点数。返回四舍五入的值。

不依赖于 Java Math.round() 类型

于 2018-01-22T00:21:18.237 回答