如何使用 Java 将 float 转换为 int

2022-08-31 04:37:46

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

 float a=8.61f;
 int b;

 b=(int)a;

结果是:(它应该是89)

当 时,结果为 :(它应该是a = -7.65f-7-8)

最好的方法是什么?


答案 1

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


答案 2

实际上,有不同的方法可以将 float 降低到 int,具体取决于您要实现的结果:(对于 int ,floatif)

  • round(与给定浮点数最接近的整数)

    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
    

对于值的舍入,您也可以只使用 ,其工作方式与在这些情况下完全相同(根据 doc)。(int)(f + 0.5)Math.Round

您也可以使用舍入到最接近的偶数;如果您希望处理大量分数部分严格等于 .5 的浮点数(请注意可能的 IEEE 舍入问题),并希望将集合的平均值保持在适当的位置,那么可以说是有用的;不过,您将引入另一个偏差,其中偶数将比奇数更常见。Math.rint(f)

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

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

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