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

时间:2016-07-27 00:53:48

标签: java math

记住Java的doublesdouble-precision floating-point个数字。 并且没有失去精度的最大整数是 9007199254740991 2 53 -1

有没有获得此值的干净方法? 例如,像JavaScript的MAX_SAFE_INTEGER

中的常量一样

1 个答案:

答案 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不是一个非常“干净”的方法,所以我只是创建自己的常量。