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)
方法。挑剔:%
计算余数,而不是模:)哦,我实际上是在指定运算符名%
是余数运算符不是%?这是正确的(比较例如)。挑剔:%
计算余数,而不是模数:)哦,我实际上是在指定运算符名%
是余数运算符不是%?这是正确的(比较例如)