将整数向上舍入为3的倍数

时间:2014-11-27 20:04:17

标签: swift integer rounding

我想将整数舍入到其最接近的3的倍数。 例如:

var numberOne = 2
var numberTwo = 7
  • numberOne四舍五入等于3
  • numberTwo四舍五入等于9

我不希望它一直向下。

有什么想法吗? 感谢

5 个答案:

答案 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
}

该函数计算:

  • modulo:除数的值除以模数
  • 乘数:除数的值的整数除法
  • 如果modulo大于零,则乘数递增
  • 结果值是除数乘以乘数

仅使用整数,此算法应该比基于浮点计算的任何其他算法更快。

我将除数设为参数,您可以选择删除它并将其替换为函数体中的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
    }
}