如何通过向下舍入来将双精度转换为Java中的int?
我需要在Java中将双精度转换为int,但数值必须始终向下舍入。即 99.99999999 -> 99
我需要在Java中将双精度转换为int,但数值必须始终向下舍入。即 99.99999999 -> 99
强制转换为 int 会隐式删除任何小数。无需调用 Math.floor() (假设为正数)
简单地用(int)进行类型转换,例如:
System.out.println((int)(99.9999)); // Prints 99
话虽如此,它确实具有不同的行为,该行为与向负无穷大舍入的行为不同(@Chris Wong)Math.floor
要将双精度转换为 int 并将其舍入为最接近的整数(即,与典型的 和 不同,后者将同时“向下舍入”为 0 并返回),只需将 0.5 添加到将类型转换为 int 的
双精度
值。(int)(1.8)
(int)(1.2)
1
例如,如果我们有
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);
进行类型转换。仅当十进制值大于或等于 0.2 时,才会向上舍入。也就是说,通过在类型转换之前将 0.8 添加到紧接在类型转换之前,10.15 和 10.03 将在类型转换时向下舍入为 10,但 10.23 和 10.7 将向上舍入为 11。(int)a + 1
double
(int)