我使用以下行将float转换为int,但是它不如我所希望的那么准确:
float a=8.61f;
int b;
b=(int)a;
结果为:8(应为9)
当为a = -7.65f时,结果为:-7(应为-8)
最好的方法是什么?
我应该指出,仅类型转换会截断该值,并且不会对该值执行任何舍入/除法运算。
使用Math.round()会将浮点数舍入到最接近的整数。
为什么在Math.round()之后需要进行类型转换?
Math.round()返回int值,因此使用(int)进行类型转换是多余的。
使用/或... (int)foo更简单。
Solveks的答案是正确的,但我想指出Math.round()可以基于输入具有两种不同的输出类型。 Math.round(double a)返回一个long。 Math.round(float a)返回一个int。 docs.oracle.com/javase/7/docs/api/java/lang/
与强制转换为(int)相比,Math.round()操作缓慢
实际上,有多种方法可以将float转换为int,具体取决于您要实现的结果:
(对于int i,浮点型f)
舍入(最接近给定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
注意:根据合同,这等于(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)进行四舍五入,但是rint不会将0.5向上舍入,而是将其向上或向下舍入,无论哪个较低或较高的整数都是偶数,因此在大多数情况下它是无用的。
看到
http://mindprod.com/jgloss/round.html
http://docs.oracle.com/javase/6/docs/api/java/lang/Math.html
有关更多信息和一些示例。
哈! (int)(f + 0.5)正是我所需要的!
Math.round(value)将值四舍五入到最接近的整数。
采用
1) b=(int)(Math.round(a));
2) a=Math.round(a);
b=(int)a;
使用Math.round(value),然后在类型转换后将其转换为整数。
float a = 8.61f;
int b = (int)Math.round(a);
Math.round(float)返回一个int,我不确定为什么要强制转换为int
Math.round还返回整数值,因此您无需进行类型转换。
int b = Math.round(float a);
其他答案已经说明了这一点。仅当您要添加新内容时,才添加新答案。 (此外,Math.round不会返回int。)
他给出了关于不需要打字的解释(对Sachithra的回答)。但是它可能会转换为注释。
对我来说,更容易:(int)(a +.5)// a是浮点数。返回舍入值。
不依赖于Java Math.round()类型
这会使很多分析代码的开发人员感到困惑。尚不清楚它是舍入的。
当然,这只是基础数学,只需尝试
"基础数学"是一个相对术语。 :)根据我的经验,我敢打赌,超过50%的开发人员不会理解它确实是四舍五入的。从数学上讲这是正确的,但是正如我所写的那样,目前尚不清楚,其他人很难理解代码的作用。
-(int) ( PI 3 ):尝试使用负数a ...的代码,因为当-0.5舍入为0时?
如果数字是负数,您就对了,您必须添加-0.5来代替