如何使用 Java 将 float 转换为 int
2022-08-31 04:37:46
我使用以下行将 float 转换为 int,但它并不像我想要的那么准确:
float a=8.61f;
int b;
b=(int)a;
结果是:(它应该是8
9
)
当 时,结果为 :(它应该是a = -7.65f
-7
-8
)
最好的方法是什么?
我使用以下行将 float 转换为 int,但它并不像我想要的那么准确:
float a=8.61f;
int b;
b=(int)a;
结果是:(它应该是8
9
)
当 时,结果为 :(它应该是a = -7.65f
-7
-8
)
最好的方法是什么?
使用会将浮点数舍入为最接近的整数。Math.round()
实际上,有不同的方法可以将 float 降低到 int,具体取决于您要实现的结果:(对于 int ,floati
f
)
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
了解更多信息和一些示例。