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

Swift:获得以零结尾的下一个最高数字,swift,algorithm,Swift,Algorithm,我必须对某些健康行业的数据运行一些算法进行验证。其中一个要求检查某个点的总数是否以零结尾,如果不是,则获取以零结尾的下一个最高数字。我有此代码,但我想知道是否有更好的方法: let strTotal = String(iTotal) var iSubtractor = iTotal if Int(String(strTotal.last!))! != 0 { var bIsZeroEnding = false repeat {

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

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…我确实在我的变量名中看到了输入错误…strsubstrator…:D

我有这个代码,但我想知道是否有更好的方法来做它

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

let roundedNumber = ((oldNumber + 9)/10) * 10
无需任何字符串转换。我们加9,然后 四舍五入到下一个10的倍数(使用 整数除法将结果截断为整数结果)

我有这个代码,但我想知道是否有更好的方法来做它

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

let roundedNumber = ((oldNumber + 9)/10) * 10
无需任何字符串转换。我们加9,然后 四舍五入到下一个10的倍数(使用
整数除法将结果截断为整数结果)。

您只需执行以下操作:

var desiredNumber = ceil(Double(iTotal)/10)*10
此方法的工作原理:

  • 假设我们原来的数字是37。如果我们把它除以10,我们得到3.7
  • 如果我们达到3.7,我们得到4。把它乘以除法器会得到40。这适用于每个分隔器

    • 这就是您需要做的全部工作:

      var desiredNumber = ceil(Double(iTotal)/10)*10
      
      此方法的工作原理:

      • 假设我们原来的数字是37。如果我们把它除以10,我们得到3.7
      • 如果我们达到3.7,我们得到4。把它乘以除法器会得到40。这适用于每个分隔器

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

      输出:60.0

      或者,对于纯
      int
      ,您可以在
      余数
      运算符
      (%)的帮助下获得它


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

      输出:60.0

      或者,对于纯
      int
      ,您可以在
      余数
      运算符
      (%)的帮助下获得它



      iTotal到底是什么?一个int?让newNumber=((oldNumber+9)/10)*10
      ,而不包含所有的字符串内容怎么样?那
      var-value=75
      然后
      重复{value+=1}呢!(值%10)==0))
      我对“下一个最高数字”的表达有点困惑:您想要下一个还是剩余数字中的最高数字?让你的清单是11、20、30。你已经解析了11个;20是下一个数字,30是最高的。你的名单可能有排序吗?我认为如果你能编辑你的文章,包括一个输入列表的例子,这将是有益的iTotal到底是什么?一个int?让newNumber=((oldNumber+9)/10)*10
      ,而不包含所有的字符串内容怎么样?那
      var-value=75
      然后
      重复{value+=1}呢!(值%10)==0))
      我对“下一个最高数字”的表达有点困惑:您想要下一个还是剩余数字中的最高数字?让你的清单是11、20、30。你已经解析了11个;20是下一个数字,30是最高的。你的名单可能有排序吗?我认为如果你能编辑你的文章,包括你的输入列表的例子,那将是有益的。你能给我解释一下这个吗<代码>((5+9)/10)*10变为14?(5+9)@Vollan:整数除法截断,所以
      ((5+9)/10)*10
      变成
      (14/10)*10=1*10=10
      啊,对了,忘了整数截断,谢谢!你能给我解释一下这个吗<代码>((5+9)/10)*10变为14?(5+9)@Vollan:整数除法截断,所以
      ((5+9)/10)*10
      变成
      (14/10)*10=1*10=10
      啊,对了,忘了整数截断,谢谢!或者使用
      双精度
      中的
      四舍五入(.up)
      方法。或者使用
      双精度
      中的
      四舍五入(.up)
      方法。挑剔:
      %
      计算余数,而不是模:)哦,我实际上是在指定
      运算符名
      %
      是余数运算符不是%?这是正确的(比较例如)。挑剔:
      %
      计算余数,而不是模数:)哦,我实际上是在指定
      运算符名
      %
      是余数运算符不是%?这是正确的(比较例如)