Swift中两个小数之间的随机数

10

我想要一个在两个小数之间随机的数字。

例如0.8和1.3之间的数字。

var duration = CGFloat(arc4random() % 0.8) / 1.3
或者
var duration = CGFloat(arc4random() % 0.5) + 0.8

谢谢!


如果你想要得到两个随机数,可以调用那个色调两次并存储到数组中。 - Frans Raharja Kurniawan
@Bejibun 我不想要两个数字,我想要一个在0.8和1.3之间的数字。 - SirRupertIII
@HotLicks 请帮忙!听起来你知道怎么做。 - SirRupertIII
用浮点数作为除数时,符号“%”代表什么意思? - Hot Licks
这个 https://dev59.com/F1jUa4cB1Zd3GeqPUcQY#6529063 应该很容易翻译成Swift。 - Martin R
显示剩余3条评论
2个回答

35

我刚刚写了一个通用函数,用于快速获取在指定范围内的随机数。

func randomBetween(_ firstNum: CGFloat, _ secondNum: CGFloat) -> CGFloat{
    return CGFloat(arc4random()) / CGFloat(UINT32_MAX) * abs(firstNum - secondNum) + min(firstNum, secondNum)
}

它取一个随机数,找到该数字除以两个参数之差的余数,然后加上较小的数字。这确保了随机数在两个数字之间。

免责声明:我还没有测试过这个功能。

EDIT:现在此函数已按您要求执行。


1
我认为取余运算符%不接受浮点数作为第二个参数。 - Martin R
2
@MartinR 那个错误只是 Swift 在我使用 Int % CGFloat 时发出的警告。一旦我将 Int 强制转换为 CGFloat,它就可以正常工作了。而且,在 Swift 中,求余运算符(而不是模运算符)具有不同的行为:https://developer.apple.com/library/ios/documentation/swift/conceptual/swift_programming_language/BasicOperators.html - erdekhayser
@MartinR 没错。它失败的原因与我的示例相同。 - SirRupertIII
2
这并不像我想象中的那么随机(有很多个9)。我将在游乐场进行测试。 - erdekhayser
不知道它接受浮点数,谢谢你的信息! - Martin R
如果firstNum始终小于secondNum,则此代码应更快:static func randomBetweenNumbers(lowerNum: CGFloat, higherNum: CGFloat) -> CGFloat{ return CGFloat(arc4random()) / CGFloat(UINT32_MAX) * (higherNum - lowerNum) + lowerNum } - Patrick

3

Swift 5:

使用random(in:)方法生成指定范围内的随机值。

var duration = CGFloat.random(in: 0.8 ... 1.3)

根据苹果文档:

random() 静态方法会从一个连续均匀分布的范围中选择一个随机值,并将该值转换为此类型中最接近的可表示值。

参见random(in: using: )以指定非默认的随机生成器。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接