Java使用64位IEEE-754表示,因此小于1的最接近的数字理论上3FEFFFFFFFFFFFFF是十六进制表示,对于符号为0,对于指数为-1,对于52位有效数字为1.9999999999999997.这相当于粗略0.9999999999999998.
参考文献:IEEE-754计算器.
您想要的号码由返回Math.nextAfter(1.0, -1.0).
该函数的名称有点用词不当. Math.nextAfter(a, 1.0)返回大于的最小double值a(即,之后的下一个值a),并Math.nextAfter(a, -1.0)返回小于a的最大值(即之前 的值a).
注意:另一张海报说,1.0-Double.MIN_NORMAL.那是错的. 1.0-Double.MIN_NORMAL完全等于1.0.