想生成一个[0,1]的随机数,但是random自带的nextDouble()只包括[0,1)
请问大神们有没有办法包括后面的1?

解决方案 »

  1.   

    random.nextInt(2) 就是0-1的随机数了
      

  2.   


    random.nextInt只会生成整数型,然而我需要double的,也就是0-1之间的所有小数,所以这个方法应该是不行的。。
      

  3.   


    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);
    }
    }
      

  4.   

    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());
    }
    }
    }
      

  5.   

    random.nextDouble(2),筛掉大于1 的
      

  6.   

    double nextDouble()刚好可以哎
      

  7.   

    考虑到概率的问题可以使用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()方法同理。