[英]How to cast a double to an int in Java by rounding it down?
我需要在 Java 中将 double 转换为 int,但数值必须始终向下取整。 即 99.99999999 -> 99
转换为 int 隐式丢弃任何小数。 无需调用 Math.floor()(假设为正数)
只需使用 (int) 进行类型转换,例如:
System.out.println((int)(99.9999)); // Prints 99
话虽如此,它确实与Math.floor
有不同的行为,后者向负无穷大舍入(@Chris Wong)
要将 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。
(int)99.99999
它将是 99。将 double 转换为 int 不会舍入,它会丢弃小数部分。
Math.floor(n)
其中 n 是双精度值。 看起来,这实际上会返回一个双精度值,因此请确保在此之后对其进行类型转换。
这很好用int i = (int) dbl;
new Double(99.9999).intValue()
试试这个,这很简单
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
可能这些代码会帮助你。
尝试使用 Math.floor。
在这个问题中:
1.将双精度转换为整数是非常容易的任务。
2.但它不会将双精度值四舍五入到最接近的小数。 因此铸造可以这样完成:
double d=99.99999999;
int i=(int)d;
System.out.println(i);
它将打印99
,但尚未完成舍入。
因此,我们可以使用四舍五入,
double d=99.99999999;
System.out.println( Math.round(d));
这将打印100
的输出。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.