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

时间:2017-05-22 00:21:24

标签: swift rounding

我想要转到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

2 个答案:

答案 0 :(得分:10)

地图N - &gt; N * 2,圆形,映射N - > N / 2。

extension Double{
    func roundToClosestHalf() -> Double {
        return (self*2).rounded() / 2
    }
}

答案 1 :(得分:0)

更新:仅限楼层(感谢Rob提供警告)

这是一个较短的版本:

extension Double{
    func roundToClosestHalf() -> Double{
        return Double(Int(self*2))/2
    }
}