函数rpcToken = Math.round(1E8 * Double.parseDouble(" 0。" +(int)(Math.random()* Integer.MAX_VALUE)));在java中做什么?

时间:2017-04-13 20:52:24

标签: java

你好我不是java程序员,

我需要知道这个功能的作用:

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

这只是生成一个随机的8个数字字符串?我需要在PHP中完全使用它。

谢谢

1 个答案:

答案 0 :(得分:0)

Math.random()为您提供小于1但至少为0.的伪随机数。

这乘以Integer.MAX_VALUE,即2147483647.结果是0到2147483646之间的数字。

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

"0." +将此转换为String,并添加“0”到它的开头。

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

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

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

所以,总的来说,我们在0到99999999之间有一个假定的随机数,但最终结果非常偏斜。使用此代码无法生成许多数字(1到9999999之间的数字似乎不可能,但仍然可以使用0)并且此代码将比其他数字更频繁地生成某些数字(接近一半生成的数字将以1开头,等等比平均值可能以0)结束,我发现所有这些都是故意的(尽管如果不知道代码的目的就无法肯定地说出来。)

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