C# 生成一个可以步进C的随机数#

C# 生成一个可以步进C的随机数#,c#,C#,现在确定标题是否描述了我真正想要的,但一个活生生的例子总是更好。 我想在两个整数值(100,1000)之间生成一个随机数,但只需要50步,所以接受的答案应该是100或150或450或500或750或800等 我知道一个简单的随机测试应该这样做: Random random = new Random(); int randomNumber = random.Next(100, 1000); 基本上,您不能跳过范围内的数字(这将删除随机性属性),因此只需生成一致的随机数并将其映射到所需的目标数字集

现在确定标题是否描述了我真正想要的,但一个活生生的例子总是更好。 我想在两个整数值(100,1000)之间生成一个随机数,但只需要50步,所以接受的答案应该是100或150或450或500或750或800等

我知道一个简单的随机测试应该这样做:

Random random = new Random();
int randomNumber = random.Next(100, 1000);
基本上,您不能跳过范围内的数字(这将删除随机性属性),因此只需生成一致的随机数并将其映射到所需的目标数字集


在您的情况下,这是非常容易的,因为您有一个固定的步长。但这甚至适用于更复杂的东西;最糟糕的情况是,您创建了一个将目标空间中的一个随机数映射到一个数的。这还允许您获得不同的分布(例如,在某些数字比其他数字更可能出现的情况下制作模具)。

将范围数字除以步长,使用较小的范围生成随机数,将结果乘以步长?这只是数学-有什么问题吗?我在想数学。舍入(Round),但这是一个额外的步骤:)如果不是很明显,你可以用
随机到达上面的步骤。下一步(minSize/step,maxSize/step)*step
@EpicKip小心舍入随机数。这很快就破坏了随机性。例如
Math.Round(random.Next(20)/10.0))
对于0、1和2分别具有30%、45%和25%的分布,这是因为
Math.random
的“智能”舍入行为。
int randomNumber = random.Next(2, 20) * 50;