铭记Java的双打是 双精度浮点数字.并且没有失去精度的最大整数是9007199254740991或2 53 -1
是否有任何干净的方法来获得这个价值? 例如,像JavaScript的MAX_SAFE_INTEGER中的常量一样
有一个名为 的内部 JDK 类,它有一些常量,您可以使用这些常量使用“可接受的”幻数和sun.misc.DoubleConsts来生成您要查找的值,但它本身没有定义该数字。12
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;
Run Code Online (Sandbox Code Playgroud)
然而,依赖sun.misc包中的类并不是一个非常“干净”的方法,所以我只是创建自己的常量。