如何通过向下舍入来将双精度转换为Java中的int?

2022-08-31 11:56:10

我需要在Java中将双精度转换为int,但数值必须始终向下舍入。即 99.99999999 -> 99


答案 1

强制转换为 int 会隐式删除任何小数。无需调用 Math.floor() (假设为正数)

简单地用(int)进行类型转换,例如:

System.out.println((int)(99.9999)); // Prints 99

话虽如此,它确实具有不同的行为,该行为与向负无穷大舍入的行为不同(@Chris Wong)Math.floor


答案 2

要将双精度转换为 int 并将其舍入为最接近的整数(即,与典型的 和 不同,后者将同时“向下舍入”为 0 并返回),只需将 0.5 添加到将类型转换为 int 的双精度值。(int)(1.8)(int)(1.2)1

例如,如果我们有

double a = 1.2;
double b = 1.8;

然后,对 x 和 y 使用以下类型转换表达式,并将返回舍入值 ( 和 ):x = 1y = 1

int x = (int)(a);   // This equals (int)(1.2) --> 1
int y = (int)(b);   // This equals (int)(1.8) --> 1

但是通过向每个结果添加 0.5,我们将获得在某些情况下我们可能想要的舍入到最接近整数的结果( 和 ):x = 1y = 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 + 1double(int)


推荐