62,614
社区成员
发帖
与我相关
我的任务
分享
Math.random()*1.0000000000000003
或Math.random()*1.0000000000000002
因为double类型的计算结果保存15~16位小数,所以Math.random()的最大值输出结果应该是0.9999999999999999。而0.9999999999999999*1.0000000000000003和0.9999999999999999*1.0000000000000002的输出结果都是1.0,所以求出的随机数区间就是无限近似[0,1],而输出值的区间就是[0,1],这样不会有1的生成概率变大的问题,事实上生成1.0的概率是微乎其微的。java.util.Random类的nextDouble()方法同理。import java.util.*;
class Random0to1
{
public static void main(String[] args)
{
Random r = new Random();
double d =0.1;
for(int i=0;i<100000;i++)
{
d = r.nextDouble();
if(d>0.9999)
System.out.println(1);
else
System.out.println(new Random().nextDouble());
}
}
}
Random random = new Random();
for(int i=0;i<100000;i++){
double dou = random.nextDouble();
//这个0.9999由你根据需要来控制其出现的几率。
if(dou >= 0.9999){
dou = 1.0;
System.out.println(dou);
}
}