Округление в Swift с круглым()

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

round(0.8)

который возвращает 1, как и ожидалось. Вот мой вопрос:--2-->

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

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

6 ответов


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

round(1000 * x) / 1000

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)

Swift 3

на round(someDecimal) старый стиль c. Двойники и поплавки теперь имеют встроенную функцию 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 перед вами круглый.


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

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

это будет округляться до любого значения, не ограниченного степенями 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
    }
}

Swift 4:

(x/1000).rounded()*1000