我需要在Java中将double转换为int,但数值必须始终四舍五入。即99.99999999-> 99
我需要在Java中将double转换为int,但数值必须始终四舍五入。即99.99999999-> 99
Answers:
强制转换为int会隐式删除任何小数。无需调用Math.floor()(假设为正数)
只需使用(int)进行类型转换,例如:
System.out.println((int)(99.9999)); // Prints 99
话虽这么说,它的行为确实与Math.floor
向负无穷大舍入的行为不同(@Chris Wong)
Math.floor
确实会产生与简单类型转换不同的结果。
System.out.println((long)(9.9999e300));
BigDecimal
和RoundingMode
类用途ROUND_DOWN
为圆形,向零和ROUND_FLOOR
的圆形towards-负无穷大。
要将double转换为int并将其四舍五入到最接近的整数(即与典型的(int)(1.8)
and不同(int)(1.2)
,它们都将朝0舍入并返回1
),只需将0.5加到double
您将要转换为an的int
整数上即可。
例如,如果我们有
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
作为一个小纸条,这种方法也可以让你控制的阈值,在其double
被四舍五入后(int)
类型转换。
(int)(a + 0.8);
进行类型转换。仅(int)a + 1
在十进制值大于或等于0.2时才四舍五入。也就是说,通过double
在紧临类型转换前加上0.8,可以在类型转换时将10.15和10.03舍入为10 (int)
,但是将10.23和10.7舍入为11。
System.out.println(""+ (int)(-0.8d + 0.5))
输出0,而不是预期的-1
Math.floor(n)
其中n是双精度数。看来,这实际上会返回一个double值,因此请确保您在之后进行了打字。