随机长总是最小值

A random long is always the min value

我写了一个函数来生成一个介于 Long.MIN_VALUE 和 Long.MAX_VALUE 之间的随机 long 值,但它总是 return Long.MIN_VALUE,为什么?

public static long randomLong() {
    return (long) (Math.random()*(Long.MAX_VALUE-Long.MIN_VALUE)+Long.MIN_VALUE);
}

谢谢你帮助我

问题是您的 long 值溢出了。因为 Long.MIN_VALUE 对于带符号的 long 是负的,所以 Long.MAX_VALUE-Long.MIN_VALUE 大于 Long.MAX_VALUE 因此在中间计算期间不适合 long。

尝试改用 nextLong:

public static long randomLong() {
    Random ran = new Random();
    return ran.nextLong();
}

由于溢出,Long.MAX_VALUE - Long.MIN_VALUE的结果是-1。该值乘以 Math.random(),一个介于 0.01.0 之间的值。就是一个doubleLong.MIN_VALUE加上-1.00.0之间的一个值,结果还是Long.MIN_VALUE。与 Long.MIN_VALUE 相比,double 不够精确,无法添加如此小的内容,因此结果是 Long.MIN_VALUE 作为 double.

要检索均匀分布的随机数 long,请使用 Random class 及其 method nextLong().

// This Random object can be stored in the class for reuse
Random rnd = new Random();

然后:

return rnd.nextLong();