在我的一个类中有一个双精度值,它有一个上界。
问题是当我试图将此变量设置为大于其限制的值时。当发生这种情况时,我想将其设置为限制范围内最接近的值。
当我尝试的时候,尴尬的情况发生了.getLimit() - Double.MIN_VALUE
没有效果
谁能给我解释一下吗?如果您可以使用Java 8,那么Math.nextDown
函数似乎正是您正在寻找的。
如果你不能使用Java 8, Math.nextDown
源代码中的相关行是:
return Double.longBitsToDouble(Double.doubleToRawLongBits(d) +
((d > 0.0d)?-1L:+1L));
如果你知道d
是正的,你可以简化一下。
我想你想要Math.ulp()
:
double d = 1.234566789123456789e20;
double delta = d - Math.ulp( d );
System.out.println( d > delta );
打印true
.