为什么将double转换为int不能在Java中按预期工作?

问题描述 投票:0回答:3

我已经开始阅读Java8的文档,并尝试了不同的示例代码。发现以下奇怪行为。

样本1

Double di = new Double(Math.pow(2,32-1));
System.out.printf("%f\n",di.doubleValue()); //2147483648.000000
int a= di.intValue();
System.out.println(a); //2147483647

Sample2

Double di = new Double(Math.pow(2,32-1)) - 1.0;
System.out.printf("%f\n",di.doubleValue()); //2147483647.000000
int a= di.intValue();
System.out.println(a); //2147483647

在两种情况下,int值都返回相同的值吗?

java type-conversion int range double
3个回答
0
投票

int值不能超过Integer.MAX_VALUE,该值恰好是2147483647。调用intValue()时,您自愿放弃所有尾巴。


0
投票

[请参阅https://docs.oracle.com/javase/specs/jls/se7/html/jls-5.html#jls-5.1.3重要部分,最后以粗体突出显示:


0
投票

这是因为Java中int类型的最大值为2147483647。当您调用Double::doubleValue时,如果您尝试转换的值超出范围并且由此方法的docs声明,则它将执行缩小转换。

在缩小原始转换后,将此Double的值返回为int。

© www.soinside.com 2019 - 2024. All rights reserved.