有没有比以下更好的方法来生成3位数的随机数:
var now = DateTime.Now.Ticks.ToString(CultureInfo.InvariantCulture);
string my3digitrandomnumber = now.Substring(now.Length - 7, 3);
谢谢..
答案 0 :(得分:19)
是 - 您当前的代码根本不是随机。它基于系统时间。特别是,如果你同时在多个线程中使用它 - 或者甚至在同一个线程中连续几次使用它 - 你每次都会获得相同的数字。
您应该使用Random
或RandomNumberGenerator
(更安全)。
例如,一旦有了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