为了验证,我必须对某些医疗行业的数字运行一些算法。其中之一需要检查某个点的总和是否以零结尾,如果没有得到以零结尾的第二个最高数字。我有这段代码,但我想知道是否有更好的方法:
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
}呃.我确实看到我的var name...strSubstractor的错误..。:D
发布于 2018-04-12 11:54:50
我有这段代码,但我想知道是否有更好的方法
是的,有。将一个(非负的)整数舍入到下一个10的倍数可以简单得多
let roundedNumber = ((oldNumber + 9)/10) * 10不需要对字符串进行任何转换。我们添加9,然后舍入到10的下一个倍数(使用整数除法将结果截断为整数结果这一事实)。
发布于 2018-04-12 11:55:55
这就是你所需要做的:
var desiredNumber = ceil(Double(iTotal)/10)*10此方法是如何工作的:
发布于 2018-04-12 12:06:26
您可以使用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)https://stackoverflow.com/questions/49795709
复制相似问题