Swift实现:获取大于指定数值的下一个以零结尾的数
医疗行业数值验证:获取下一个以零结尾数的优化实现
嘿,针对你在医疗行业数值验证算法里的这个需求,我来分享几个更高效简洁的实现方案!你的核心需求是:检查某节点的合计值是否以零结尾,若不是则获取大于该值的下一个以零结尾的数。先看看你目前的代码片段:
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!...
这种通过字符串转换+循环递增检查的方式,不仅代码冗长,还存在两个明显的问题:一是字符串转换的性能开销(尤其是处理大量医疗数据时),二是循环次数不可控(比如从9999到10000要循环1次,但从1到10要循环9次,效率低下)。
最优方案:纯数学计算实现
完全不需要字符串操作,直接通过数学运算就能一步得到结果,逻辑清晰且性能拉满:
func nextZeroEndingNumber(_ value: Int) -> Int { let remainder = value % 10 // 如果已经以0结尾,直接返回原数;否则加上(10-余数)得到下一个0结尾的数 return remainder == 0 ? value : value + (10 - remainder) }
举几个例子验证:
- 输入
123,余数是3,计算123 + (10-3) = 130,正确 - 输入
450,余数是0,直接返回450,正确 - 输入
999,余数是9,计算999 +1 =1000,正确
扩展:兼容负数场景(医疗行业可能少见,但可以备用)
如果你的业务中存在负数数值的情况,只需要稍作调整,确保返回的是大于原数的下一个0结尾数:
func nextZeroEndingNumber(_ value: Int) -> Int { let remainder = value % 10 guard remainder != 0 else { return value } if value < 0 { // 比如输入-12,下一个大于它的0结尾数是-10 return value - remainder } else { return value + (10 - remainder) } }
这种纯数学的实现方式,既避免了字符串转换的额外开销,也省去了循环迭代的过程,非常适合医疗行业对数值处理的准确性和高效性要求,代码也更易维护和阅读。
内容的提问来源于stack exchange,提问作者PruitIgoe
相关产品推荐
相关产品推荐

