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

Sir*_*III 9 random ios swift

我想在两个小十进制数之间得到一个随机数.

介于0.8和1.3之间.

var duration = CGFloat(arc4random() % 0.8) / 1.3
Run Code Online (Sandbox Code Playgroud)

要么

var duration = CGFloat(arc4random() % 0.5) + 0.8
Run Code Online (Sandbox Code Playgroud)

谢谢!

erd*_*ser 35

这是一个通用函数,我刚刚写了一个范围内的随机数.

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

它需要一个随机数,找到该数字的余数除以两个参数之间的差值,然后加上较小的数字.这保证了随机数在两个数字之间.

免责声明:我还没有测试过.

编辑:现在这个功能做你想要的.

  • @MartinR这个错误只是Swift因为拥有Int%CGFloat而对我大喊大叫.一旦我将Int转换为CGFloat,它就可以了.是的,余数运算符(非模数)在Swift中有不同的行为:https://developer.apple.com/library/ios/documentation/swift/conceptual/swift_programming_language/BasicOperators.html (2认同)
  • 这并不像我想象的那样随机(很多9个).我会在操场上试试 (2认同)

Mar*_*rcy 3

斯威夫特5:

使用random(in:)返回指定范围内的随机值:

var duration = CGFloat.random(in: 0.8 ... 1.3)
Run Code Online (Sandbox Code Playgroud)

每苹果:

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

请参阅random(in: using: )来指定默认值以外的随机生成器。