Искам да се закръгля до най-близката половина Double
, Например, ако номер е 3.76
Искам да бъде закръглена 4
, От друга страна, ако има такъв номер 3.74
Искам да се закръгли 3.5
.
Аз дойдох с този код:
extension Double {
func roundToClosestHalf() -> Double {
let upperLimit = ceil(self)
let difference = upperLimit - self
if difference <= 0.25 {
return ceil(self)
} else if difference > 0.25 && difference < 0.75 {
return upperLimit - 0.5
} else {
return floor(self)
}
}
}
Има ли по-ефективен / по-добър начин да направите това?
let x = 3.21.roundToClosestHalf() // 3
Отговори:
10 за отговор № 1Карта N -> N * 2, кръг, карта N -> N / 2.
extension Double{
func roundToClosestHalf() -> Double {
return (self*2).rounded() / 2
}
}
0 за отговор № 2
Update: само на пода (благодарение на Rob за предупреждение)
Ето по-кратка версия:
extension Double{
func roundToClosestHalf() -> Double{
return Double(Int(self*2))/2
}
}