gpt4 book ai didi

Java 6 - 创建并检测高于 Long.MAX_VALUE 的第一个 double 值

转载 作者:行者123 更新时间:2023-12-01 19:37:06 26 4
gpt4 key购买 nike

下面我尝试将最大Long值分配给value,然后添加可能的最小正Double值。

然后,我尝试检测该值是否大于最大 Long 值。

Double value = new Long(Long.MAX_VALUE).doubleValue();
value += Double.MIN_VALUE;
if (value < -(new Long(Long.MAX_VALUE).doubleValue()) || value > new Long(Long.MAX_VALUE).doubleValue()) {
// Expecting code here to execute, but it doesn't.
}

研究涉及的值表明value的最终值为

9.223372036854776E18
= 9223372036854776000

Long.MAX_VALUE 具有该值时

9223372036854775807

比较这些结果表明比预期的要大:

9223372036854776000 (value)
9223372036854775807 (Long.MAX_VALUE)

有人可以解释一下为什么 if 语句无法检测到这一点吗?

真诚的感谢。

最佳答案

Long.MAX_VALUE 无法精确表示为 double 型。最接近的可用 double 值是 9223372036854775808

Double.MIN_VALUE 添加到该数字 (10^-1074) 不会改变任何内容,因为与 9223372036854775808 + 10^-1074 最接近的 double 值仍然是 9223372036854775808

使用@PeterLawrey的代码,您可以看到下一个可用的 double 是9223372036854777856(等于Long.MAX_VALUE + 2048)。

注意:您的 double 实际上等于 9223372036854775808,它打印9.223372036854776E18。您可以使用以下代码查看它:

double d = Long.MAX_VALUE;
BigDecimal bd= new BigDecimal(d);
System.out.println(bd);

关于Java 6 - 创建并检测高于 Long.MAX_VALUE 的第一个 double 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12355839/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com