我的一个类中有一个double值,有一个上限。
问题是当我尝试将此变量设置为大于其限制的值时。当发生这种情况时,我想将其设置为极限内的最接近的值。
当我尝试时,会出现一种尴尬的情况
.getLimit() - Double.MIN_VALUE
哪个没有效果。
有人可以为我澄清这个吗? 提前谢谢。
答案 0 :(得分:1)
如果您可以使用Java 8,Math.nextDown
功能似乎正是您正在寻找的。 p>
如果您不能使用Java 8,Math.nextDown
来源的相关行是:
return Double.longBitsToDouble(Double.doubleToRawLongBits(d) +
((d > 0.0d)?-1L:+1L));
如果您知道d
是正面的,可以稍微简化一下。
答案 1 :(得分:1)
我想你想要Math.ulp()
:
double d = 1.234566789123456789e20;
double delta = d - Math.ulp( d );
System.out.println( d > delta );
打印true
。