我使用以下行将 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 i
, float f
)
舍入(最接近给定浮点数的整数)
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)
到最接近的偶数;如果您希望处理大量小数部分严格等于 0.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;
Math.round 还返回一个整数值,因此您不需要进行类型转换。
int b = Math.round(float a);
Math.round(value)
然后在类型转换为整数之后使用。
float a = 8.61f;
int b = (int)Math.round(a);
通过将原语传递给构造函数来实例化Float
对象float
,然后使用Float
您创建的对象返回int
原语。
解释 |
---|
由于数字包装器类扩展了java.lang.Number 该类,因此您可以使用该方法让任何数字包装器对象返回任何其他数字原始.<type>Value() 类型。 |
.intValue()
方法返回一个原始int
.Float mFloat = Float.valueOf(8.65f);
int i = mFloat.intValue();
Math.round() 就足够了
int b = Math.round(a)
这将完成工作
如果要将浮点值转换为整数值,有几种方法可以做到这一点,具体取决于您要如何舍入浮点值。
第一种方法是对浮点值进行四舍五入:
float myFloat = 3.14f;
int myInteger = (int)myFloat;
此代码的输出将为 3,即使 myFloat 值更接近 4。
第二种方法是 ceil 舍入浮点值:
float myFloat = 3.14f;
int myInteger = Math.ceil(myFloat);
此代码的输出将为 4,因为舍入模式始终在寻找最大值。
对我来说,更简单:(int) (a +.5) // a 是一个浮点数。返回四舍五入的值。
不依赖于 Java Math.round() 类型