有办法将java.lang.Double转换为java.lang.Integer吗?
它会抛出一个异常
" . lang。ClassCastException: java.lang.Double不兼容java.lang.Integer"
有办法将java.lang.Double转换为java.lang.Integer吗?
它会抛出一个异常
" . lang。ClassCastException: java.lang.Double不兼容java.lang.Integer"
当前回答
实际上,最简单的方法是使用intValue()。然而,这仅仅返回整数部分;它不做任何舍入。如果你想要最接近Double值的Integer,你需要这样做:
Integer integer = Integer.valueOf((int) Math.round(myDouble)));
不要忘记空大小写:
Integer integer = myDouble == null ? null : Integer.valueOf((int) Math.round(myDouble)));
Math.round()相对优雅地处理奇数鸭子情况,如无穷大和NaN。
其他回答
Double不是Integer,所以强制转换无效。注意Double类和Double原语之间的区别。还要注意,Double是一个数字,因此它有方法intValue,您可以使用该方法获取作为原始int的值。
实际上,最简单的方法是使用intValue()。然而,这仅仅返回整数部分;它不做任何舍入。如果你想要最接近Double值的Integer,你需要这样做:
Integer integer = Integer.valueOf((int) Math.round(myDouble)));
不要忘记空大小写:
Integer integer = myDouble == null ? null : Integer.valueOf((int) Math.round(myDouble)));
Math.round()相对优雅地处理奇数鸭子情况,如无穷大和NaN。
或者,可以先转换为原语double,然后转换为int,让它自动装箱为Integer。
Double d = 20.3;
Integer i = (int) (double) d; //20
//To obtain primitive:
int i2 = (int) (double) d;
你可以使用“缩小或显式类型转换”来做到这一点, Double→long→int。我希望它能起作用。
double d = 100.04;
long l = (long)d; // Explicit type casting required
int i = (int)l; // Explicit type casting required
PS:它会给出0,因为double有所有的十进制值,左边什么都没有。如果是0.58,它将把范围缩小到0。但对其他人来说,它会产生魔力。
你需要使用方法intValue()像这样显式地获取int值:
Double d = 5.25;
Integer i = d.intValue(); // i becomes 5
Or
double d = 5.25;
int i = (int) d;