获得两位数的随机数,尽管小于10

时间:2013-05-06 11:20:46

标签: c# random

我希望我的程序随机选择一个日期作为出生日期。第一个随机数是年份,第二个是月份,最后一个是日期。

Random rand = new Random();
for (int i = 0; i < antal; i++)
    array[i].Number = rand.Next(00, 99) +
                      rand.Next(01, 12) +
                      rand.Next(01, 30);

然而,如果随机数小于10,比如3,我希望它显示“03”,而不仅仅是“3”。有没有办法在C#中做到这一点?或者有更好的方法来随机分娩出生日期吗?

8 个答案:

答案 0 :(得分:6)

数字没有格式 - 整数是整数,因此数字3可以平均表示为03,3,0x3等。

此外,您只是添加数字 - 您不会连接字符串表示。所以第一个数字可能是50,第二个数字可能是6,第三个数字可能是3 ......所以你最终得到的是59,而不是500603,这可能是你的预期。

可以简单地将年份乘以10000,将月份乘以100,但肯定最好存储DateTime值。

获取1950年和2050年之间的随机日期的最简单方法是:

int year = random.Next(100) + 1950;
int daysInYear = DateTime.IsLeapYear(year) ? 366 : 365;
DateTime date = new DateTime(year, 1, 1).AddDays(random.Next(daysInYear));

通过这种方式,您可以在一年中的正确日期获得所有,而且没有无效的 - 在您的原始代码中,您可以轻松地在2月30日结束,例如......假设您' d实际修复了您的代码,以考虑到Random.Next的第二个参数是独占而不是包含这一事实。 (否则你永远不会得到第30名,你也永远不会在12月获得价值......)

尽可能使用最合适的数据类型非常重要。如果要表示日期,请使用与日期相关的类型。如果要表示文本,请使用字符串。如果要表示数字,请使用适当的数字类型。您会发现,如果您使用正确的数据类型,则可以摆脱批次错误。

答案 1 :(得分:4)

string.Format("{0:00}",1); //Prints 01
string.Format("{0:00}",2); //Prints 02

答案 2 :(得分:0)

rnd.Next(0, 99).ToString("D2");

这将确保数字在字符串表示中的最小2位数。

array[i].Number = rand.Next(00, 99)ToString("D2") +
                  rand.Next(01, 12)ToString("D2") +
                  rand.Next(01, 30)ToString("D2");

答案 3 :(得分:0)

您可以将整数转换为字符串并使用。

发送格式
int Number = 3;

String NumberInString = Number.ToString("00"); //Will return 03

答案 4 :(得分:0)

数字不知道格式。您可以格式化字符串。

如果您已有字符串,则可以使用String.PadLeft

string day = "1"; 
day = day.PadLeft(2, '0');

如果day是数字:

int day = 1;
string dayStr = day.ToString("D2");

Pad a Number with Leading Zeros

Demo

答案 5 :(得分:0)

您可以像这样格式化数字:

n.ToString("00");

在您的情况下(假设您的Number是一个数字):

array[i].Number.ToString("00")

或者,如果Number是字符串:

array[i].Number = rand.Next(00, 99).ToString("00") +
                  rand.Next(01, 12).ToString("00") +
                  rand.Next(01, 30).ToString("00");

使用您的整个日期解决方案(假设您的Number是一个数字):

Console.WriteLine(string.Format("{0:00}-{1:00}-{2:00}", array[0].Number, array[1].Number, array[2].Number);

答案 6 :(得分:0)

你将随机数作为一个数字,但是当你打印它时,你打印它前面的0。前缀0可以用于字符串,但没有语言编译器可以帮助你存储“05”而不是“ 5“在一个int变量!

答案 7 :(得分:0)

首先创建今天和1/1/1900之间的随机日期

    DateTime start = new DateTime(1900, 1, 1);
    Random gen = new Random();

    int range = (DateTime.Today - start).TotalDays;           
    var myRandomDate = start.AddDays(gen.Next(range));

然后格式化日期以达到小于10的“0 pad”。

    myRandomDate.ToString("MM-dd-yyyy");