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