Ответ 1
Вы можете сделать:
round(1000 * x) / 1000
Во время игры я нашел функцию round() в swift. Его можно использовать, как показано ниже:
round(0.8)
Который вернет 1, как и ожидалось. Вот мой вопрос:
Как я могу округлить тысячу в секунду?
Я хочу иметь возможность подключить номер, скажем 0,6849, и получить 0,685 обратно. Как это делает round()? Или это не так, и в каком случае какая функция делает?
Вы можете сделать:
round(1000 * x) / 1000
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
прежде чем округлять.
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)
Вот один из способов сделать это. Вы можете легко сделать это для Float
или, возможно, сделать его общим, чтобы он был для любого из них.
public extension CGFloat {
func roundToDecimals(decimals: Int = 2) -> CGFloat {
let multiplier = CGFloat(10^decimals)
return round(multiplier * self) / multiplier
}
}
Swift 4:
(x/1000).rounded()*1000
Это будет округлено до любого значения, не ограниченного степенями 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
}
}