这是一个非常简单的问题,但是我找不到解决方法。可以说我有这行:
Random.Range(2,4);
我希望这不仅可以生成整数,还可以生成一半。我的意思是步长应该是0.5。我希望它仅从以下各项中随机选择: 2、2.5、3、3.5 我不要任何其他十进制数字。有人可以帮忙吗?
答案 0 :(得分:2)
这是针对您的特定情况的简单解决方案。
var randomNumber = ((float)Random.Range(4, 8)) * 0.5f;
您还可以扩展该方法以使用不同的值。
public float GetRandomFloat(int min, int max, float value = 0.5f)
{
int multipliedMin = (int) (max / value);
int multipliedMax = (int) (max / value);
return ((float) Random.Range(multipliedMin, multipliedMax)) * value;
}
答案 1 :(得分:0)
System.Random类没有您本机所需的功能,您可以为其创建自己的方法或扩展
方法
// use only one instance of System.Random to avoid getting duplicates
static System.Random ra = new Random();
static double GenRnadNum(int min,int max,double step)
{
// calc the max-min and round down
int n = (int)((max - min) / step);
int r= ra.Next(0, n);
return min + r * step;
}
用法示例dd.Add(GenRnadNum(5, 20, 0.7));
我看到许多人通过将最大值和最小值除以步长(最大值/步长,最小值/步长)来进行操作 然后将结果随机乘以步长(randomRestul * step) 但这会产生错误的结果,例如min = 2,max = 4,step = 0.3可以为您提供2.4(2 / 0.3 = 6.66-> 7,随机结果= 8,8 * 0.3 = 2.4)>