我刚接触Java,想知道如何将double转换为int?我知道将long转换为int很简单,只需取低32位即可,但是将64位的double转换为32位的int该怎么做呢?将Double-precision浮点格式(Mantissa)中的这64位以二进制形式表示,那它在内部是如何转换成int的呢?
这些内容都在JLS的section 5.1.3中有详细记录。
在第一步中,将浮点数转换为long(如果T是long)或int(如果T是byte、short、char或int),方法如下: 如果浮点数是NaN(§4.2.3),则转换的第一步结果为int或long 0。 否则,如果浮点数不是无穷大,则使用IEEE 754向零舍入模式(§4.2.3)将浮点值四舍五入为整数值V。然后有两种情况: 如果T是long,并且该整数值可以表示为long,则第一步的结果是long值V。 否则,如果该整数值可以表示为int,则第一步的结果是int值V。 否则,以下两种情况之一必须为真: 该值太小(具有较大幅度的负值或负无穷大),第一步的结果是类型int或long的最小可表示值。 该值太大(具有较大幅度的正值或正无穷大),第一步的结果是类型int或long的最大可表示值。T
是 int
时。 double d = 2.4d;
int i = (int) d;
System.out.println(i);
d = 2.6;
i = (int) d;
System.out.println(i);
输出:
2
2
除非您使用Math.round、Math.ceil或Math.floor...
您可能需要阅读Java规范:
http://docs.oracle.com/javase/specs/jls/se7/html/jls-5.html#jls-5.1.3
相关章节是5.1.3 - "缩小原始类型转换"。