Java中将Double转换为Integer

379

有没有办法将java.lang.Double转换为java.lang.Integer

它会抛出一个异常

"java.lang.ClassCastException: java.lang.Double不兼容于java.lang.Integer"

19个回答

4

试试这个

double doubleValue = 6.5;Double doubleObj = new Double(doubleValue);int intResult = doubleObj.intValue();

4

您可以通过使用“缩小或显式类型转换”,double → long → int来实现。希望这样会起作用。

double d = 100.04;
long l = (long)d; // Explicit type casting required
int i = (int)l;    // Explicit type casting required

PS: 如果一个数是double类型的,则返回值将为0,因为double类型包含所有小数位和没有左侧的数值。对于 0.58,它会缩小到 0。但对于其他数,它会产生奇妙的效果。


3

Double和Integer是Java基本数据类型double和int的包装类。你可以在它们之间进行类型转换,但是你将会失去浮点数的精度。也就是说,将5.4强制转换为int后将变成5。如果再将其强制转换回去,它将变成5.0。


1

或者,可以先将其转换为原始的double,然后转换为int,让它自动装箱为Integer

Double d = 20.3;
Integer i = (int) (double) d; //20
//To obtain primitive:
int i2 = (int) (double) d;

0

只需使用Double的intValue方法

Double initialValue = 7.12;
int finalValue = initialValue.intValue();

2
似乎是其他答案的重复。 - Pang

0
首先你应该使用 `Double` 而不是 `double`。
示例:
```java int intResult = newDoubleObj.intValue(); ```

0
使用 doubleNumber.intValue(); 方法。

2
似乎是其他答案的重复。 - Pang

-1

内存效率高,因为它将共享已创建的Double实例。

Double.valueOf(Math.floor(54644546464/60*60*24*365)).intValue()

有没有任何理由使用 Math.floor(...)intValue() 总是向下取整。 - bvdb

-3

这个方法对我有用。试试这个:

double od = Double.parseDouble("1.15");
int oi = (int) od;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接