我需要在Java中将double转换为int,但数字值必须始终向下舍入,即99.99999999 -> 99。
我需要在Java中将double转换为int,但数字值必须始终向下舍入,即99.99999999 -> 99。
System.out.println((int)(99.9999)); // Prints 99
话虽如此,它与Math.floor
的行为不同,后者向负无穷大舍入(@Chris Wong)
Math.floor
对负数的处理结果与简单的类型转换不同。 - JoeySystem.out.println((long)(9.9999e300));
- Monroe ThomasBigDecimal
和RoundingMode
类将ROUND_DOWN
用于向零舍入,将ROUND_FLOOR
用于向负无穷大舍入。 - Andreas将一个double转换为int并使其四舍五入到最接近的整数(即与典型的(int)(1.8)
和(int)(1.2)
不同,它们都会向0“向下取整”并返回1
),只需将0.5添加到您要强制转换为int的double值中。
例如,如果我们有
double a = 1.2;
double b = 1.8;
接下来针对 x 和 y 进行以下类型转换表达式将返回向下舍入的值 (x = 1
,y = 1
):
int x = (int)(a); // This equals (int)(1.2) --> 1
int y = (int)(b); // This equals (int)(1.8) --> 1
但是通过对每个数加上0.5,我们可以得到我们在某些情况下可能需要的四舍五入到最近整数的结果(x=1
且y=2
):
int x = (int)(a + 0.5); // This equals (int)(1.8) --> 1
int y = (int)(b + 0.5); // This equals (int)(2.3) --> 2
作为一个小注释,这种方法还允许您控制在进行(int)
强制类型转换时舍入double
的阈值。
(int)(a + 0.8);
进行类型转换。只有当小数值大于或等于0.2时,才会将其四舍五入为(int)a + 1
。也就是说,在类型转换之前立即将0.8添加到double
上,10.15和10.03在(int)
类型转换时将被舍弃为10,但10.23和10.7将会被四舍五入为11。
System.out.println(""+ (int)(-0.8d + 0.5))
会输出0,而不是预期的-1。 - Gil Vegliach(int)99.99999
这将会是99。 将一个double转换为int并不会四舍五入,它会丢弃小数部分。
Math.floor(n)
其中n是一个双精度浮点数。似乎这会返回一个双精度浮点数,所以确保在之后进行类型转换。
new Double(99.9999).intValue()
这个代码可以正常工作 int i = (int) dbl;
double x= 20.22889909008;
int a = (int) x;
this will return a=20
Double x = 20.22889909008;
Integer a = x.intValue();
this will return a=20
double x= 20.22889909008;
System.out.println("===="+(int)x);
this will return ===20
double d=99.99999999;
int i=(int)d;
System.out.println(i);
它将打印99
,但尚未进行四舍五入。
因此,我们可以使用以下方法进行四舍五入:
double d=99.99999999;
System.out.println( Math.round(d));
这将打印出100
的输出。
尝试使用 Math.floor。