这里是我的尝试:转换龙在java中翻一番,我发现了一些差异
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
这里实际上是一个不正确的值。 P.S.我对IEEE 754
的知识知之甚少,所以也许我发现的行为是绝对正确的,但4
在这里显然是错误的值。
4.6116860184273879 ** E18 ** –