Подтвердить что ты не робот

Округление в Swift с помощью round()

Во время игры я нашел функцию round() в swift. Его можно использовать, как показано ниже:

round(0.8)

Который вернет 1, как и ожидалось. Вот мой вопрос:

Как я могу округлить тысячу в секунду?

Я хочу иметь возможность подключить номер, скажем 0,6849, и получить 0,685 обратно. Как это делает round()? Или это не так, и в каком случае какая функция делает?

4b9b3361

Ответ 1

Вы можете сделать:

round(1000 * x) / 1000

Ответ 2

Обновленный ответ

round(someDecimal) - это старый стиль C. Начиная с Swift 3, удвоения и поплавки имеют встроенную функцию Swift.

var x = 0.8
x.round() // x is 1.0 (rounds x in place)

или же

var x = 0.8
var y = x.rounded() // y is 1.0, x is 0.8

Смотрите мой ответ более полный ответ здесь (или здесь) для более подробной информации о том, как можно использовать различные правила округления.

Как отмечалось в других ответах, если вы хотите округлить до тысячных, то умножьте временно на 1000 прежде чем округлять.

Ответ 3

func round(value: Float, decimalPlaces: UInt) {
  decimalValue = pow(10, decimalPlaces)
  round(value * decimalValue) / decimalValue
}
…
func round(value: CGFloat, decimalPlaces: UInt)
func round(value: Double, decimalPlaces: UInt)
func roundf(value: Float, decimalPlaces: UInt)

Ответ 4

Вот один из способов сделать это. Вы можете легко сделать это для Float или, возможно, сделать его общим, чтобы он был для любого из них.

public extension CGFloat {
    func roundToDecimals(decimals: Int = 2) -> CGFloat {
        let multiplier = CGFloat(10^decimals)
        return round(multiplier * self) / multiplier
    }
}

Ответ 5

Swift 4:

(x/1000).rounded()*1000

Ответ 6

Это будет округлено до любого значения, не ограниченного степенями 10.

extension Double {
    func roundToNearestValue(value: Double) -> Double {
        let remainder = self % value
        let shouldRoundUp = remainder >= value/2 ? true : false
        let multiple = floor(self / value)
        let returnValue = !shouldRoundUp ? value * multiple : value * multiple + value
        return returnValue
    }
}