你好,我不是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,然后将其四舍五入?