2014-09-25 2 views
6

Я хотел бы получить случайное число между двумя маленькими десятичными числами.Случайное число между двумя десятичными знаками в Swift

Между может быть 0,8 и 1,3.

var duration = CGFloat(arc4random() % 0.8)/1.3 

или

var duration = CGFloat(arc4random() % 0.5) + 0.8 

Спасибо!

+0

вызовите этот оттенок дважды и сохраните массив, если вы хотите получить 2 случайных числа. – Bejibun

+0

Это простая математика. Каков диапазон числа? –

+0

@HotLicks я не понимаю. Хотел бы я сделать это CGFloat (arc4random()% 0.5) + 0.8, но я не знаю, как получить правильный синтаксис с десятичными числами. Мой диапазон составляет от 0,8 до 1,3. – KKendall

ответ

33

Вот общая функция, которую я только что написал быстро, чтобы получить случайное число в пределах диапазона.

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

Он принимает случайное число, находит остаток от этого числа, разделенного на разности между этими двумя параметрами, а затем добавляет в меньшем количестве. Это гарантирует, что случайное число должно быть между двумя числами.

Отказ от ответственности: Я еще не проверял это.

EDIT: Теперь эта функция делает то, что вы хотите.

+1

Я не думаю, что оператор остатка % принимает число с плавающей запятой в качестве второго аргумента. –

+2

@MartinR эта ошибка была просто Swift, кричащая на меня за наличие Int% CGFloat. Как только я наложил Int на CGFloat, он работает. И да, оператор останова (не модуль) имеет различное поведение в Swift: https://developer.apple.com/library/ios/documentation/swift/conceptual/swift_programming_language/BasicOperators.html – erdekhayser

+0

@MartinR Вы правы. Он не работает по той же причине, что и мой пример. – KKendall