/ / Това ли е добро изпълнение за закръгляване на Double до най-близката половина? - бърз, закръглен

Дали това е добро изпълнение за закръгляване на Двойна до най-близката половина? - бърз, закръглен

Искам да се закръгля до най-близката половина 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
}
}