Swift:获得以零结尾的下一个最高数字

时间:2018-04-12 11:45:51

标签: swift algorithm

我必须在某些健康行业编号上运行一些算法以进行验证。其中一个需要检查某个点的总数是否以零结束,如果没有得到以零结尾的下一个最高数字。我有这个代码,但我想知道是否有更好的方法:

let strTotal = String(iTotal)
    var iSubtractor = iTotal

    if Int(String(strTotal.last!))! != 0 {
        var bIsZeroEnding = false

        repeat {

            iSubtractor += 1
            let strSubstractor = String(iSubtractor)
            if Int(String(strSubstractor.last!))! == 0 {
                bIsZeroEnding = true
            }

        } while !bIsZeroEnding
    }

Doh ......我确实看到了我的var名称中的拼写错误... strSubstractor ...:D

3 个答案:

答案 0 :(得分:4)

  

我有这段代码,但我想知道是否有更好的方法来做到这一点

是的,有。使用

可以更简单地将(非负)整数舍入到下一个10的倍数
mklink "E:\Folder A\Folder B" "E:\Folder A\Folder C\bibliography.bib"

无需任何转换为​​字符串。我们加9然后 向下舍入到10的下一个倍数(使用的事实 整数除法截断结果为整数结果。)

答案 1 :(得分:1)

这就是你需要做的所有事情:

var desiredNumber = ceil(Double(iTotal)/10)*10

此方法的工作原理:

  • 假设我们原来的数字是37.如果我们除以10,我们得到3.7。
  • 如果我们通过3.7,我们得到4.乘以它的除法器将得到我们40.这适用于每个分频器。

答案 2 :(得分:1)

您可以使用ceil。它适用于(非负)和(负)数字。

extension CGFloat {
    func nearest(to num: CGFloat) -> CGFloat {
        return num * ceil(self/num)
    }
}

let value: CGFloat = 53.0
print(value.nearest(to: 10))

输出:60.0

或者对于纯int,您可以在remainder运算符(%)的帮助下获取它。

let value: Int = 33
let rem: Int = value%10

// Here, If rem == 0 that means number is fully divisible by 10 (Contains 0 at last)
let result: Int = (rem == 0) ? value : value + (10 - rem)