将double设置为限制值,不包括

时间:2014-07-08 23:08:21

标签: java

我的一个类中有一个double值,有一个上限。

问题是当我尝试将此变量设置为大于其限制的值时。当发生这种情况时,我想将其设置为极限内的最接近的值。

当我尝试时,会出现一种尴尬的情况  .getLimit() - Double.MIN_VALUE

哪个没有效果。

有人可以为我澄清这个吗? 提前谢谢。

2 个答案:

答案 0 :(得分:1)

如果您可以使用Java 8,Math.nextDown功能似乎正是您正在寻找的。

如果您不能使用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