string v = new Random().NextDouble().ToString().Substring(v.IndexOf(".") + 1).Substring(0, 8);
上面得到的v值重复的机率大吗?(如果是同一个方法里面调用两次)。今天生成订单的时候竟然碰到两个重复的,前面还有8位年月日

解决方案 »

  1.   

    Random r = new Random();
    调用2次
    string v = r.NextDouble().ToString().Substring(v.IndexOf(".") + 1).Substring(0, 8);v = r.NextDouble().ToString().Substring(v.IndexOf(".") + 1).Substring(0, 8);
      

  2.   


    什么说法。我是每次获取都Random r = new Random();
      

  3.   

    每次获取都Random r = new Random();有问题
      

  4.   

    是不是说Random r = new Random();
    string v = r.NextDouble().ToString().Substring(v.IndexOf(".") + 1).Substring(0, 8);
    v = r.NextDouble().ToString().Substring(v.IndexOf(".") + 1).Substring(0, 8);
    Random r = new Random();
    string v = r.NextDouble().ToString().Substring(v.IndexOf(".") + 1).Substring(0, 8);Random r1 = new Random();
    v = r1.NextDouble().ToString().Substring(v.IndexOf(".") + 1).Substring(0, 8);
    下面那个两次new Random()重复的机率高吗?如果是的话为什么啊?
      

  5.   

    Random r = new Random();
    string v = r.NextDouble().ToString().Substring(v.IndexOf(".") + 1).Substring(0, 8);Random r1 = new Random();
    v = r1.NextDouble().ToString().Substring(v.IndexOf(".") + 1).Substring(0, 8);new Random()是创建以当前时间为种子的随机数,在很短的时间内同时创建两个实例,种子(当前时间)多半是一致的,所以重复性很高。
    只用一个Random实例则可以避免这个问题。
    Random r = new Random();
    string v = r.NextDouble().ToString().Substring(v.IndexOf(".") + 1).Substring(0, 8);
    v = r.NextDouble().ToString().Substring(v.IndexOf(".") + 1).Substring(0, 8);什么是种子?
    计算机只能产生模拟的随机数,这种随机数是根据一种模拟随机数公式计算出来的,所以需要有输入值,才能输出随机数。一般的种子是根据当前机器硬件标识+时间等来自动生成,也可以直接传入。
    计算机模拟的随机数实际上是公式模拟产生的,并不是真正意义上随机生成的,所以如果种子(输入)相同,输出的随机数也相同。
      

  6.   

    new Random()是创建以当前时间为种子的随机数,在很短的时间内同时创建两个实例,种子(当前时间)多半是一致的,所以重复性很高。
    Random r = new Random();
    string v = r.NextDouble().ToString().Substring(v.IndexOf(".") + 1).Substring(0, 8);Random r1 = new Random();
    v = r1.NextDouble().ToString().Substring(v.IndexOf(".") + 1).Substring(0, 8);
    只用一个Random实例则可以避免这个问题。
    Random r = new Random();
    string v = r.NextDouble().ToString().Substring(v.IndexOf(".") + 1).Substring(0, 8);
    v = r.NextDouble().ToString().Substring(v.IndexOf(".") + 1).Substring(0, 8);什么是种子?
    计算机只能产生模拟的随机数,这种随机数是根据一种模拟随机数公式计算出来的,所以需要有输入值,才能输出随机数。一般的种子是根据当前机器硬件标识+时间等来自动生成,也可以直接传入。
    计算机模拟的随机数实际上是公式模拟产生的,并不是真正意义上随机生成的,所以如果种子(输入)相同,输出的随机数也相同。
      

  7.   

         private static int GetRandomSeed()
            {
                byte[] bytes = new byte[4];
                System.Security.Cryptography.RNGCryptoServiceProvider rng = new System.Security.Cryptography.RNGCryptoServiceProvider();
                rng.GetBytes(bytes);
                return BitConverter.ToInt32(bytes, 0);
            } Random rd = new Random(GetRandomSeed());
     rd.Next(0,10);
      

  8.   

    Random rand = new Random(Guid.NewGuid().GetHashCode());