如何在范围内生成随机浮点数,Swift

时间:2016-01-25 19:42:14

标签: ios swift

我是Swift的新手,之前只使用过Python和Pascal。我想知道是否有人可以帮助生成范围内的浮点数。我知道不能直接做到。所以这就是我创造的。但是,它似乎不起作用。

func location() {
    // let DivisionConstant = UInt32(1000)

    let randomIntHeight = arc4random_uniform(1000000) + 12340000
    let randomIntWidth = arc4random_uniform(1000000) + 7500000

    XRandomFloat = Float(randomIntHeight / UInt32(10000))
    YRandomFloat = Float(randomIntWidth / UInt32(10000))

    randomXFloat = CGFloat(XRandomFloat)
    randomYFloat = CGFloat(YRandomFloat)

    self.Item.center = CGPointMake(randomXFloat, randomYFloat)
}

从它的外观来看,当我运行它时,它没有除以DivisionConstant的值,所以我评论了它并用原始值替换它。但是,self.Item仍会显示在屏幕外。任何建议都将不胜感激。

2 个答案:

答案 0 :(得分:0)

我不确定你希望产生什么数字,但你得到的结果如下:

1317.0, 764.0
1237.0, 795.0
1320.0, 814.0
1275.0, 794.0
1314.0, 758.0
1300.0, 758.0
1260.0, 809.0
1279.0, 768.0
1315.0, 838.0
1284.0, 763.0
1273.0, 828.0
1263.0, 770.0
1252.0, 776.0
1255.0, 848.0
1277.0, 847.0
1236.0, 847.0
1320.0, 772.0
1268.0, 759.0

然后,您将其用作UI元素的中心。除非它非常大,否则很可能是屏幕外的。

答案 1 :(得分:0)

这种划分可能不是你想要的:

XRandomFloat = Float(randomIntHeight / UInt32(10000))

执行整数除法(丢弃任何余数),然后将结果转换为Float。你的意思是:

XRandomFloat = Float(randomIntHeight) / Float(10000)

这是一个浮点数,其粒度约为1/10000。

您的初始代码:

let randomIntHeight = arc4random_uniform(1000000) + 12340000

生成12340000和(12340000 + 1000000-1)之间的随机数。鉴于你的最终缩放,这意味着1234和1333的范围。这对你的最终目标来说似乎很奇怪。我假设你真的只是arc4random_uniform(12340000),但我可能会误解你的目标。

鉴于你的意见,我认为你过于复杂了。假设您需要一个积分(即非小数)点,以下内容应该在屏幕上给出一个随机点,这几乎总是你想要的:

let bounds = UIScreen.mainScreen().bounds

let x = arc4random_uniform(UInt32(bounds.width))
let y = arc4random_uniform(UInt32(bounds.height))
let randomPoint = CGPoint(x: CGFloat(x), y: CGFloat(y))

您的问题是您将最大值添加到随机值中,所以当然它总是在屏幕外。

相关问题