Округление в Swift с круглым()
во время игры я нашел функцию round() в swift. Его можно использовать как ниже:
round(0.8)
который возвращает 1, как и ожидалось. Вот мой вопрос:--2-->
как мне округлить на тысячные доли в swift?
Я хочу иметь возможность подключить номер, скажем 0.6849, и получить 0.685 обратно. Как round() это делает? Или, не так ли, в этом случае, какая функция выполняет?
6 ответов
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
}
}