这是将Double翻转到最接近的一半的良好实现吗?

fja*_*fja 3 rounding swift

我想绕到最接近的一半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)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

有没有更有效/更好的方法来做到这一点?

let x = 3.21.roundToClosestHalf() // 3
Run Code Online (Sandbox Code Playgroud)

Rob*_*ier 10

映射N - > N*2,舍入,映射N - > N/2.

extension Double{
    func roundToClosestHalf() -> Double {
        return (self*2).rounded() / 2
    }
}
Run Code Online (Sandbox Code Playgroud)