这是我尝试过的:
public class LongToDoubleTest{
public static void main(String... args) {
System.out.println(Long.MAX_VALUE);
System.out.println(Long.MAX_VALUE/2);
System.out.println(Math.floor(Long.MAX_VALUE/2));
System.out.println(new Double(Math.floor(Long.MAX_VALUE/2)).longValue());
}
}
这是输出:
9223372036854775807
4611686018427387903
4.6116860184273879E18
4611686018427387904
我最初试图弄清楚,是否可以在不丢失数据的情况下将 Long.MAX_VALUE 的一半保持为双倍,所以我对所有这些行进行了测试,除了最后一个。所以看来我是对的,最后一个3
失踪了。然后,为了澄清这一点,我添加了最后一行。并没有3
出现但是4
。所以我的问题是,这些是从哪里4
出现的,为什么是4
而不是3
。因为4
这里实际上是一个不正确的值。PS我对 的了解很差IEEE 754
,所以也许我发现的行为是绝对正确的,但4
这里显然是错误的值。