Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java中获得Double中最安全的最大整数_Java_Math - Fatal编程技术网

如何在Java中获得Double中最安全的最大整数

如何在Java中获得Double中最安全的最大整数,java,math,Java,Math,记住Java的 数字。 且不丢失精度的最大整数为9007199254740991或253-1 是否有任何干净的方法获得此值? 例如,与JavaScript的中的常量一样,有一个名为的内部JDK类,它有一些常量,您可以使用1和2生成要查找的值,但它本身没有定义数字 public static long MAX_SAFE_VALUE = sun.misc.DoubleConsts.SIGNIF_BIT_MASK * 2 + 1; // alternatively public s

记住Java的 数字。 且不丢失精度的最大整数为9007199254740991253-1

是否有任何干净的方法获得此值?
例如,与JavaScript的

中的常量一样,有一个名为的内部JDK类,它有一些常量,您可以使用
1
2
生成要查找的值,但它本身没有定义数字

public static long MAX_SAFE_VALUE = 
        sun.misc.DoubleConsts.SIGNIF_BIT_MASK * 2 + 1;

// alternatively
public static long MAX_SAFE_VALUE = 
        Math.pow(2, sun.misc.DoubleConsts.SIGNIFICAND_WIDTH) - 1;

然而,这不是一个非常“干净”的方法,所以我只创建自己的常量。

我不知道。可能是一个
public static final double MAX\u SAFE\u INTEGER=(在此处插入整数)
。希望其他人知道得更多。这些常数是从IEEE浮点数和双精度数的属性派生出来的。它们在使用(比如)IEEE双精度的语言实现之间不会发生变化。您可以在自己的代码中安全地硬编码2e53-1,并且不需要特殊的常量。使用
Double.MAX_VALUE
有什么问题吗?@TimBiegeleisen这是Double表示的最大值,不是表示所有整数都可表示的范围的最大整数。有人能提供一个链接来讨论这个问题背后的理论吗?万一有人碰巧对此一无所知(咳嗽)?