java - 混淆 Java 中的 long 与 double 行为

标签 java numbers double long-integer

这是一个小方法,显示类型转换为 double 作品,但普通 longs 没有。

public void test() {
    long s = Long.MIN_VALUE;
    long e = Long.MAX_VALUE;
    System.out.println((double)e-(double)s);
    System.out.println(e-s);
    System.out.println(Double.SIZE);
    System.out.println(Long.SIZE);
}

上述方法的输出是:

1.8446744073709552E19
-1
64
64

所以问题是,如果 double 和 long 在 Java 中都是 64 位数字,那么为什么类型转换为 double 会给出更好的结果?

后续问题:

在 Java 中,我想将 long 的整个范围(从 -2^63 到 2^63-1)分成 10,000 个相等的范围。我怎样才能做同样的事情? (一些代码真的很有帮助)。

最佳答案

Long.MAX_VALUE - Long.MIN_VALUE 高于 Long.MAX_VALUE,这就是此减法导致数值溢出的原因。因此您得不到正确的结果。

double 类型表示的数字范围更广,但精度较低(因为一些位表示数字的数字,而其余位表示指数)。

longdouble 类型都使用 64 位来表示数字这一事实并不意味着它们都支持相同的值范围。他们没有。

double可以表示的最大值是1.7976931348623157E308,而long可以表示的最大值是2^63-1,它要小得多 (9.223372036854776E18)。

关于java - 混淆 Java 中的 long 与 double 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43626127/

相关文章:

java - RabbitMQ basic.get 和确认

java - 如何从 Spring 5 WebClient ClientResponse 中提取响应 header 和状态代码

java - 有没有办法在java控制台中对扫雷游戏的行和列进行编号?

java - 关于 double 和平等

java - 请求 Spring Data JPA 存储库时指定复杂的排序标准

java - 找出特定字体中字符串的宽度

javascript - 两个相等的字符串表示 JS 中不相等的空格

javascript - IF、OR 和 AND 以及不同的结果 JavaScript

java - 当jTable行上的数字很大时,如何不显示E的幂?

c++ - 在 C++ 中检查 double (或 float )是否为 NaN