【问题标题】:Swift: Get next highest number that ends in zeroSwift:获取以零结尾的下一个最高数字
【发布时间】:2018-04-12 11:45:51
【问题描述】:

我必须对某些健康行业数字运行一些算法以进行验证。其中一个需要检查某个点的总数是否以零结尾,如果不是,则获取以零结尾的下一个最高数字。我有这段代码,但想知道是否有更好的方法:

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 名称中看到了错字...strSubtractor... :D

【问题讨论】:

  • iTotal 到底是什么?一个整数?
  • let newNumber = ((oldNumber + 9)/10) * 10 怎么样,没有所有字符串的东西?
  • var value = 75 然后repeat { value+=1 } while !(value%10) == 0)) 怎么样
  • 我对“下一个最高数字”的表达有点困惑:你想要下一个,还是剩下的最高数字?让您的列表为 11、20、30。您已经解析了 11; 20是下一个数字,30是最高的。您的列表是否已排序?我认为如果您可以编辑您的帖子,包括输入列表的示例,这将是有益的

标签: swift algorithm


【解决方案1】:

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

是的,有。将(非负)整数四舍五入到 10 的下一个倍数可以更简单地使用

let roundedNumber = ((oldNumber + 9)/10) * 10

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

【讨论】:

  • 你能给我解释一下吗? ((5+9)/10) * 10 变成 14? (5+9)
  • @Vollan:整数除法截断,所以((5+9)/10) * 10变成(14/10) * 10 = 1 * 10 = 10
  • 对了,忘记截断int了,谢谢!
【解决方案2】:

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

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

此方法的工作原理:

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

【讨论】:

  • 或者使用Double中的rounded(.up)方法。
【解决方案3】:

您可以使用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)

【讨论】:

猜你喜欢
  • 2016-02-19
  • 1970-01-01
  • 2021-02-25
  • 1970-01-01
  • 1970-01-01
  • 2014-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多