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

Double扩展formatTrackTime属性Getter方法字符串格式化崩溃排查求助

代码崩溃隐患分析

你提供的Double扩展代码存在2个明确会触发崩溃的问题:

  • 未处理无穷值场景:当前仅判断了非NaN的逻辑,Double.infinity(正无穷)、-Double.infinity(负无穷)的isNaN属性为false,会进入正常计算分支,对无穷值做算术运算后转换为Int会直接触发溢出崩溃。
  • 未限制数值范围:如果Double的数值超出当前平台Int的可表示范围(比如32位平台Int最大值为2147483647,对应秒数约为68年),执行Int()转换时会直接触发崩溃,常见于业务层返回异常超大时长的场景。
修复后的代码

优化逻辑后可覆盖所有异常场景,同时简化了计算逻辑:

extension Double {
    public var formatTrackTime: String {
        // 提前过滤所有异常值:非数字、无穷值、负数、超出Int可承载范围的超大值
        guard !self.isNaN, !self.isInfinite, self >= 0, self <= Double(Int.max) else {
            return "0:00"
        }
        let totalSeconds = Int(self)
        let hour = totalSeconds / 3600
        let minute = (totalSeconds % 3600) / 60
        let second = totalSeconds % 60
        return hour > 0 ? String(format: "%d:%02d:%02d", hour, minute, second) : String(format: "%02d:%02d", minute, second)
    }
}

内容的提问来源于stack exchange,提问作者Jake

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 15:57:01