You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 10:01:50