Fra*_*ank 329 java floating-point int
我使用以下行将float转换为int,但它并不像我想的那样准确:
float a=8.61f;
int b;
b=(int)a;
Run Code Online (Sandbox Code Playgroud)
结果是:( 8应该是9)
什么时候a = -7.65f,结果是:( -7应该是-8)
最好的方法是什么?
tw3*_*124 654
使用Math.round()将浮点数舍入到最接近的整数.
vax*_*uis 183
实际上,有不同的方法可以将float向下转换为int,具体取决于你想要实现的结果:(对于int i,float f)
round(给定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
Run Code Online (Sandbox Code Playgroud)
注意:按合同,这是等于 (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
Run Code Online (Sandbox Code Playgroud)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
Run Code Online (Sandbox Code Playgroud)对于舍入正值,您也可以使用(int)(f + 0.5),这与Math.Round那些情况完全相同(根据文档).
从理论上讲,你可以Math.rint(f)用来进行舍入,但i不会向上舍入0.5,它会向上或向下舍入,无论哪个较低或较高的整数是偶数,所以在大多数情况下它都是无用的.
看到
http://mindprod.com/jgloss/round.html
http://docs.oracle.com/javase/6/docs/api/java/lang/Math.html
了解更多信息和一些例子.
SHU*_*RAN 14
Math.round(value) 将值四舍五入到最接近的整数.
使用
1) b=(int)(Math.round(a));
2) a=Math.round(a);
b=(int)a;
Run Code Online (Sandbox Code Playgroud)
小智 13
通过将原语传递给构造函数来实例化Float对象,然后使用您创建的对象返回原语。floatFloatint
| 解释 |
|---|
由于数字包装器类扩展了该类java.lang.Number,因此您可以使用该方法让任何数字包装器对象返回任何其他数字基元.<type>Value()类型。 |
.intValue()方法返回一个原语int。Float mFloat = Float.valueOf(8.65f);
int i = mFloat.intValue();
Run Code Online (Sandbox Code Playgroud)
小智 5
Math.round(value)然后在将其强制转换为整数后使用.
float a = 8.61f;
int b = (int)Math.round(a);
Run Code Online (Sandbox Code Playgroud)
小智 5
Math.round还返回整数值,因此您无需进行类型转换。
int b = Math.round(float a);
Run Code Online (Sandbox Code Playgroud)