如何在Java或Groovy中找到下一个Double?

Pet*_*ter 4 java double groovy numbers

当有一个Double d时,我想知道哪个Double'是比d更小的可能值.

当d == 0时,我知道答案,那就是Double.MIN_VALUE:

> 0d + Double.MIN_VALUE
4.9E-324
Run Code Online (Sandbox Code Playgroud)

但是比如1d这样的所有欧姆数字呢?

> 1d + Double.MIN_VALUE
1.0
Run Code Online (Sandbox Code Playgroud)

我猜想它必须具有重要的数字,但简而言之:我正在寻找一种能让我获得下一个双倍的方法

nextDouble(0)==4.9E-324
Run Code Online (Sandbox Code Playgroud)

小智 10

看看这些功能.

public static double nextAfter(double start, double direction)

返回第二个参数方向上第一个参数旁边的浮点数.如果两个参数比较相等,则返回第二个参数.

public static double nextUp(double d)

返回正无穷大方向上与d相邻的浮点值.此方法在语义上等效, nextAfter(d, Double.POSITIVE_INFINITY);但nextUp实现可能比其等效的nextAfter调用运行得更快.

  • 恕我直言:这是最好的答案. (2认同)

Har*_*ezz 5

这样做:

Double d = Math.random();
Double next = d + Math.ulp(d);
Run Code Online (Sandbox Code Playgroud)

来自JavaDoc:

双值的ulp是该浮点值与接下来幅度较大的双值之间的正距离.

  • 你应该接受答案**你认为是正确的答案,它最能回答你的问题. (2认同)