objective-c - 使用 arc4random 随机化 float ?

标签 objective-c ios random

我有一个 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/

相关文章:

ios - UIScrollView - 将 View 移到前面,但在滚动指示器下方

ios - 按下回车键时在 objective-c 中执行代码?

iOS Flicker API 只需上传一张公共(public)图片?

页面上的javascript随机图像加载并在一段时间内发生变化

python - 如何从Python字典的最高值中随机打破平局?

Objective-C 类别 == 访问者模式?

ios - 前缀头导入取消了库对相同方法的实现

ios - 突出显示并滚动到 UICollectionView 中的随机单元格

android - 在 oncreate 方法之外生成一个随机数

ios - 父 View 调整大小后,tableview 不调整大小