我想将整数舍入到其最接近的3的倍数。 例如:
var numberOne = 2
var numberTwo = 7
我不希望它一直向下。
有什么想法吗? 感谢
答案 0 :(得分:12)
我让它在游乐场工作:
import Foundation
func roundToThree(value: Int) -> Int{
var fractionNum = Double(value) / 3.0
let roundedNum = Int(ceil(fractionNum))
return roundedNum * 3
}
roundToThree(2)
roundToThree(7)
答案 1 :(得分:12)
我的2 ct:
func roundUp(value: Int, divisor: Int) -> Int {
let rem = value % divisor
return rem == 0 ? value : value + divisor - rem
}
答案 2 :(得分:1)
我是这样实现的:
func roundUp(value: Int, divisor: Int) -> Int {
let modulo = value % divisor
var multiplier = value / divisor
if modulo > 0 {
++multiplier
}
return divisor * multiplier
}
该函数计算:
仅使用整数,此算法应该比基于浮点计算的任何其他算法更快。
我将除数设为参数,您可以选择删除它并将其替换为函数体中的3
文字,或者为其指定默认值:
func roundUp(value: Int, divisor: Int = 3) -> Int
答案 3 :(得分:0)
带有可配置乘数的swift3 Float扩展(改编自@erdekhayser接受的答案)
{{1}}
答案 4 :(得分:0)
这就像Martin R的答案,但是通过四舍五入到最接近的倍数而不仅仅是舍入
Swift 3/4
func roundUp(value: Double, divisor: Double) -> Double {
let rem = value.truncatingRemainder(dividingBy: divisor)
if(rem >= divisor / 2)
{
return rem == 0 ? value : value + divisor - rem
}
else
{
return rem == 0 ? value : value - rem
}
}