记住Java的doubles是 double-precision floating-point个数字。 并且没有失去精度的最大整数是 9007199254740991 或 2 53 -1
有没有获得此值的干净方法? 例如,像JavaScript的MAX_SAFE_INTEGER
中的常量一样答案 0 :(得分:3)
有一个名为sun.misc.DoubleConsts
的内部JDK类,它有一些常量,您可以使用1
和{{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;
然而,"accpetable" magic numbers不是一个非常“干净”的方法,所以我只是创建自己的常量。