C#需要一个以两个0';s
本文关键字:两个 一个以 | 更新日期: 2023-09-27 18:01:19
我正在制作一个程序,通过批号搜索产品。我希望批号是一个以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;
}
您不应该在Random中设置固定种子,因为它将始终生成相同的随机数序列。例如,如果您在循环中调用函数,它将始终返回相同的数字,因此不是随机的。
此外,Next((函数中的参数是上界互斥的,因此使用10000而不是9999,这样您也可以获得9999作为随机数。
为什么每个人都在创建6位数?真正需要的是创建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")
然而,请注意,对于小于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
的一个大上限,因此在许多情况下将没有任何可填充的内容。
正如其他人所指出的,你可以在"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");