首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >斯威夫特:得到以零结尾的第二个最高数。

斯威夫特:得到以零结尾的第二个最高数。
EN

Stack Overflow用户
提问于 2018-04-12 11:45:51
回答 3查看 232关注 0票数 0

为了验证,我必须对某些医疗行业的数字运行一些算法。其中之一需要检查某个点的总和是否以零结尾,如果没有得到以零结尾的第二个最高数字。我有这段代码,但我想知道是否有更好的方法:

代码语言:javascript
复制
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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-04-12 11:54:50

我有这段代码,但我想知道是否有更好的方法

是的,有。将一个(非负的)整数舍入到下一个10的倍数可以简单得多

代码语言:javascript
复制
let roundedNumber = ((oldNumber + 9)/10) * 10

不需要对字符串进行任何转换。我们添加9,然后舍入到10的下一个倍数(使用整数除法将结果截断为整数结果这一事实)。

票数 4
EN

Stack Overflow用户

发布于 2018-04-12 11:55:55

这就是你所需要做的:

代码语言:javascript
复制
var desiredNumber = ceil(Double(iTotal)/10)*10

此方法是如何工作的:

  • 假设我们的原始号码是37。如果除以10,我们得到3.7。
  • 如果我们计算3.7,我们得到4。乘以除法器,我们将得到40。这适用于每一个分隔器。
票数 1
EN

Stack Overflow用户

发布于 2018-04-12 12:06:26

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

代码语言:javascript
复制
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运算符(%)的帮助下获得它。

代码语言:javascript
复制
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)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49795709

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档