我有一个 float ,我试图获得一个介于 1.5 - 2 之间的随机数。我在网上看到过教程,但在我的例子中,所有教程都是将 0 随机化为一个数字,而不是 1.5。我知道这是可能的,但我一直在绞尽脑汁想如何真正做到这一点。谁能帮帮我?
Edit1:我在网上找到了以下方法,但我不想要所有这些小数位。我只想要 5.2 或 7.4 等...
我将如何调整此方法来做到这一点?
-(float)randomFloatBetween:(float)num1 andLargerFloat:(float)num2
{
int startVal = num1*10000;
int endVal = num2*10000;
int randomValue = startVal + (arc4random() % (endVal - startVal));
float a = randomValue;
return (a / 10000.0);
}
Edit2:好的,现在我的方法是这样的:
-(float)randomFloatBetween:(float)num1 andLargerFloat:(float)num2
{
float range = num2 - num1;
float val = ((float)arc4random() / ARC4RANDOM_MAX) * range + num1;
return val;
}
这会产生 1.624566 等数字吗?因为我只想说 1.5、1.6、1.7、1.8、1.9 和 2.0。
最佳答案
您可以生成一个从 0 到 0.5 的随机 float ,然后加上 1.5。
编辑:
您走在正确的轨道上。我会使用可能的最大随机值作为除数,以便在可能的值之间获得最小的间隔,而不是你正在进行的这种任意除以 10,000 的操作。所以,将 arc4random() 的最大值定义为一个宏(我刚在网上找到这个):
#define ARC4RANDOM_MAX 0x100000000
然后获取 1.5 到 2.0 之间的值:
float range = num2 - num1;
float val = ((float)arc4random() / ARC4RANDOM_MAX) * range + num1;
return val;
如果您需要,这也将为您提供 double (只需将 float
替换为 double
。)
再次编辑:
是的,当然这会给你多于一位小数的值。如果你只想要一个,只需生成一个从 15 到 20 的随机整数并除以 10。或者你可以在之后砍掉多余的地方:
float range = num2 - num1;
float val = ((float)arc4random() / ARC4RANDOM_MAX) * range + num1;
int val1 = val * 10;
float val2= (float)val1 / 10.0f;
return val2;
关于objective-c - 使用 arc4random 随机化 float ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8060753/