簡體   English   中英

如何生成范圍內的隨機浮點數,Swift

[英]How to generate a Random Floating point Number in range, 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仍顯示在屏幕外。 任何建議將不勝感激。

我不確定您希望生成什么數字,但是得到的結果是:

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元素的中心。 除非它很大,否則很可能在屏幕外。

這種划分可能不是您想要的:

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))

您的問題是,您要將最大值添加到隨機值中,因此當然總是會在屏幕外顯示。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM