我使用下面的行来转换浮点数为int,但它不是像我想要的那样准确:
float a=8.61f;
int b;
b=(int)a;
结果是:8(它应该是9)
当a = -7.65f时,结果是:-7(它应该是-8)
最好的方法是什么?
我使用下面的行来转换浮点数为int,但它不是像我想要的那样准确:
float a=8.61f;
int b;
b=(int)a;
结果是:8(它应该是9)
当a = -7.65f时,结果是:-7(它应该是-8)
最好的方法是什么?
当前回答
实际上,有不同的方法将float向下转换为int,这取决于你想要实现的结果: (对于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的工作原理完全相同。在这些情况下(根据文件)四舍五入。
你也可以使用Math.rint(f)进行舍入到最接近的偶数;如果你期望处理大量小数部分严格等于.5的浮点数(注意可能的IEEE舍入问题),并希望保持集合的平均值,那么它可以说是有用的;您将引入另一种偏差,其中偶数将比奇数更常见。
See
http://mindprod.com/jgloss/round.html
http://docs.oracle.com/javase/6/docs/api/java/lang/Math.html
获取更多信息和一些示例。
其他回答
Math.round()就足够了
int b = Math.round(a)
这样就可以了
对我来说,更简单:(int) (a +.5) // a是浮点数。返回四舍五入的值。
不依赖于Java Math.round()类型
如果您想将浮点值转换为整数值,有几种方法可以实现,这取决于您想如何四舍五入浮点值。
第一种方法是浮点值的舍入:
float myFloat = 3.14f;
int myInteger = (int)myFloat;
这段代码的输出将是3,即使myFloat值更接近4。
第二种方法是浮点值的四舍五入:
float myFloat = 3.14f;
int myInteger = Math.ceil(myFloat);
这段代码的输出将是4,因为舍入模式总是在寻找最大值。
round(value)将值四舍五入到最接近的整数。
Use
1) b=(int)(Math.round(a));
2) a=Math.round(a);
b=(int)a;
实际上,有不同的方法将float向下转换为int,这取决于你想要实现的结果: (对于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的工作原理完全相同。在这些情况下(根据文件)四舍五入。
你也可以使用Math.rint(f)进行舍入到最接近的偶数;如果你期望处理大量小数部分严格等于.5的浮点数(注意可能的IEEE舍入问题),并希望保持集合的平均值,那么它可以说是有用的;您将引入另一种偏差,其中偶数将比奇数更常见。
See
http://mindprod.com/jgloss/round.html
http://docs.oracle.com/javase/6/docs/api/java/lang/Math.html
获取更多信息和一些示例。