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

Ulr*_*ika -2 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);
Run Code Online (Sandbox Code Playgroud)

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

Jon*_*eet 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));
Run Code Online (Sandbox Code Playgroud)

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

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

  • @Nick:然后a)它名字很糟糕; b)我会质疑它是否适合代表日期; c)您可以轻松地将`DateTime`格式化为您想要的任何格式的字符串,但我会*使用正确数据类型的值启动*. (2认同)