什么函数 rpcToken = Math.round(1E8 * Double.parseDouble( "0." + (int) (Math.random() * Integer.MAX_VALUE



你好,我不是Java程序员,

我需要知道这个函数的作用:

rpcToken = Math.round(1E8 * Double.parseDouble("0." + (int) (Math.random() * Integer.MAX_VALUE)));

这只会生成一个随机的 8 个数字字符串?我需要在 PHP 中完全做到这一点。

谢谢

Math.random()给你一个小于1但至少0的伪随机数。

乘以Integer.MAX_VALUE,即2147483647。 结果是一个介于 0 和 2147483646 之间的数字。

(int)将此数字转换为整数。

"0." +将其转换为String,并在开头添加"0."。

Double.parseDouble将此String转换回double。 所以现在我们又有一个介于 0 和 1 之间的数字。 但是,由于我们创建字符串的方式,任何大于 0 但小于 0.1 的数字都是不可能的。 "0.9"和"0.900"都将转换为 0.9。

1E8 *将其乘以 1E8,即 100000000。

最后,Math.round将其四舍五入到最接近的整数。

因此,总的来说,我们有一个介于 0 和 99999999 之间的随机数,但最终结果非常偏斜。 许多数字不可能用这个代码生成(1到9999999之间的数字似乎是不可能的,但0仍然是可能的),并且这个代码会比其他数字更频繁地生成某些数字(接近一半的生成数字将以1开头,超过平均值可能以0结尾),我发现所有这些都不太可能是故意的(尽管在不知道代码目的的情况下不可能确定

。如果您只需要一个随机的 8 位数字,有更简单、更快、更好的方法。 为什么不将您在第一步中获得的随机数乘以 100000000,然后将其四舍五入?

相关内容

最新更新