float a=8.61f;
int b;
b=(int)a;
结果是:8
(应该是9
)
当 a = -7.65f
时,结果是:-7
(应该是-8
)
最好的方法是什么?
float a=8.61f;
int b;
b=(int)a;
结果是:8
(应该是9
)
当 a = -7.65f
时,结果是:-7
(应该是-8
)
最好的方法是什么?
使用Math.round()
方法可以将浮点数四舍五入为最接近的整数。
Math.round()
返回一个 int
值,所以使用 (int)
进行类型转换是多余的。 - Solvek实际上,将浮点数下转换为整数有不同的方法,具体取决于您想要实现的结果:(对于 int i
,float f
)
round (the closest integer to given 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
note: this is, by contract, equal to (int) Math.floor(f + 0.5f)
truncate (i.e. drop everything after the decimal dot)
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 (an integer always bigger/smaller than a given value if it has any fractional part)
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)
来进行最接近偶数整数的四舍五入;如果您希望处理许多具有小数部分严格等于 .5 的浮点数,并且想保持集合的平均值不变,则这可能是有用的(请注意可能的IEEE取整问题);虽然您会引入另一个偏差,即偶数将比奇数更常见。
请参阅
http://mindprod.com/jgloss/round.html
http://docs.oracle.com/javase/6/docs/api/java/lang/Math.html
了解更多信息和一些例子,请访问。
Math.round(value)
将值四舍五入为最接近的整数。
使用
1) b=(int)(Math.round(a));
2) a=Math.round(a);
b=(int)a;
通过将一个float
原始类型传递给构造函数来实例化一个Float
对象,然后使用您创建的Float
对象返回一个int
原始类型。
Explanation |
---|
由于数字包装类扩展了java.lang.Number 类,因此您可以使用.<type>Value() 方法让任何数字包装对象返回任何其他数字原始类型。 |
.intValue()
方法返回一个原始的int
。Float mFloat = Float.valueOf(8.65f);
int i = mFloat.intValue();
使用Math.round()就足够了
int b = Math.round(a)
Math.round也会返回整数值,因此您无需进行类型转换。
int b = Math.round(float a);
Math.round(value)
将值四舍五入,然后转换为整数。float a = 8.61f;
int b = (int)Math.round(a);
如果您想将浮点值转换为整数值,有几种方法可供选择,这取决于您希望如何舍入浮点值。
第一种方法是向下舍入浮点值:
float myFloat = 3.14f;
int myInteger = (int)myFloat;
float myFloat = 3.14f;
int myInteger = Math.ceil(myFloat);
对我来说,更简单的方法是:(int) (a + .5) // 这里 a 是浮点数,返回四舍五入后的整数值。
不依赖于 Java 中的 Math.round() 函数类型
a
运行您的代码...自从什么时候 -0.5
被四舍五入为 0
? - user719662