[英]C# needing a six digit number beginning with two 0's
我正在编写一个程序,其中按批次号搜索产品。 我希望批号是一个以00开头的随机6位代码,例如002142; 目前,它仅生成一个随机的6位代码。 这是我尝试过的代码:
public string getRandomNumber()
{
Random random = new Random(100000);
string randomNumber = random.Next(999999).ToString("D6");
return randomNumber;
}
public string getRandomNumber()
{
Random random = new Random();
string randomNumber = "00"+random.Next(10000).ToString("D4");
return randomNumber;
}
您不应该在随机数中设置固定种子,因为它总是会生成相同的随机数序列。 例如,如果您在循环中调用函数,它将始终返回相同的数字,因此不会是随机的。
另外,Next()函数中的参数是上限互斥,因此使用10000而不是9999,因此您也可以将9999作为随机数获得。
为什么每个人都创造6位数字? 真正需要的是create 4和concat。
int random = new Random().Next(1000, 9999);
string code = "00" + random.ToString();
编辑:
感谢您将其标记为正确答案,但我的代码错误。 如果您没有将最小值传递给下一个方法,则可以获得不需要的1到999之间的数字。 我编辑了答案。 希望一切都不会迟到。
您写了.Next(999999)
所以我假设您想要0到999999之间的随机值。
首先,您应该写1000000
因为.Next()
确定一个从0到输入值不包含的随机数。
那你应该
更换
string randomNumber = random.Next(1000000).ToString("D6");
与
string randomNumber = random.Next(999999).ToString().PadLeft(6, '0');
用0填充缺失的数字
另一种可能是"000000"
格式的字符串( 六位数字, 前导零是必需的):
random.Next(10000)
-后4位数字是随机的 ToString("000000")
-返回6位数字(至少2个前导零) 实作
string randomNumber = random.Next(10000).ToString("000000");
另一个问题是,您不应在本地声明random
变量:
// Simplest, but not thread safe
private static random = new Random();
...
public static string getRandomNumber()
{
return random.Next(10000).ToString("000000");
}
你近了 你真正想要的是一个随机的四位数字,有两个前导零(六个地方)填充。 因此,请使用Random.Next(10000).ToString("D6")
或. ToString("000000")
. ToString("000000")
但是请注意,对于小于1000的数字,最终将带有两个以上的前导零。 为了避免这种情况,您可以执行Random.Next(1000,10000)
,其中第一个数字包含在内,第二个数字包含在内。
还要注意,如果要多次调用此方法,则初始化随机数的方法是不正确的! 使您的Random
对象成为类成员(最好是static
),并且仅对其进行种子/初始化(不要将100000传递给其构造函数),否则,如果多次调用此方法,它将每次都返回相同的值。
使用new Random()
。 如果您打算以这种方式进行播种,则它必须是一个静态变量(或至少是一个类成员,但是对于该类的每个实例,最终都会生成相同的值)
我会做这样的事情:
var rnd = new Random(); // the internal seed is good enough
var rndNums = string.Join("", Enumerable.Range(0, 4).Select(x => rnd.Next(10)));
return "00" + rndNums;
然后,您可以轻松更改所需的金额,如下所示:
string GetRandomBatch(int numberOfRandomNumbers)
{
var rnd = new Random(); // the internal seed is good enough
var rndNums = string.Join("", Enumerable.Range(0, numberOfRandomNumbers).Select(x => rnd.Next(0, 9)));
return "00" + rndNums;
}
使用插值字符串(C#6.0),您可以像这样进行操作:
Random random = new Random();
string randomNumber = $"00{random.Next(9999)}";
您的ToString("D6")
确实完成了您想要的外观,但是由于您传递的是random.Next
的较大上限。 random.Next
,在许多情况下,没有什么需要填充的。
正如其他人指出的那样,您可以在前缀"00"
或简单地设置一个较低的上限,因为"D6"
将处理您的填充:
string randomNumber = random.Next(9999).ToString("D6");
如果希望数字始终为4位而不是"000123"
,则还需要指定一个下限:
string randomNumber = random.Next(1000, 9999).ToString("D6");
还要注意,如果像示例中那样指定硬编码的种子,则将始终获得相同的随机数。
这样的事情会做。
public static void Main()
{
Random rnd = new Random();
string Value = rnd.Next(1, 9999).ToString("D6");
Console.WriteLine(Value);
}
或获得相同数字的可能性较低
public static void Main()
{
Random rnd = new Random(DateTime.Now.Millisecond);
string Value = rnd.Next(1, 9999).ToString("D6");
Console.WriteLine(Value);
}
public string RandomNum()
{
return "00"+ new Random().Next(9999).ToString("D4");
}
您还可以给Next()函数指定最小和最大数目。 喜欢:
return "00"+ new Random().Next(1,9999).ToString("D4");
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.