C#中的3位数随机数

时间:2013-01-22 18:39:43

标签: c# .net

有没有比以下更好的方法来生成3位数的随机数:

var now = DateTime.Now.Ticks.ToString(CultureInfo.InvariantCulture);
string my3digitrandomnumber = now.Substring(now.Length - 7, 3);

谢谢..

5 个答案:

答案 0 :(得分:19)

是 - 您当前的代码根本不是随机。它基于系统时间。特别是,如果你同时在多个线程中使用它 - 或者甚至在同一个线程中连续几次使用它 - 你每次都会获得相同的数字。

您应该使用RandomRandomNumberGenerator(更安全)。

例如,一旦有了Random的实例,就可以使用:

int value = rng.Next(1000);
string text = value.ToString("000");

(假设你想要数字作为文本。如果你想要一个保证为三位数的整数,请使用rng.Next(100, 1000)。)

但是,Random周围有一些警告:

  • 每次使用时都想创建一个新实例;除非你指定种子
  • ,否则这也是基于时间的
  • 这不是线程安全的

理想情况下,您可能需要每个线程一个。我的article on randomness更多地讨论了这一点并提供了一些示例代码。

答案 1 :(得分:4)

您可以使用Random课程并致电Next(10)三次。

答案 2 :(得分:4)

int r = (new Random()).Next(100, 1000);

答案 3 :(得分:2)

嗯,首先,你有一个奇怪的设置,为什么你第一次得到约会?

你应该使用它来获得3位数(小于1000)。

Random rand = new Random(); // <-- Make this static somewhere

const int maxValue = 999;
string number = rand.Next(maxValue + 1).ToString("D3"); 

maxValue + 1是因为Random.Next(int)的参数是一个独占的上限,这意味着返回的数字总是小于参数。它永远不会等于它。

答案 4 :(得分:-1)

new Random.NextDouble() * 1000