车辆年度里程折算逻辑求助:现有Swift代码计算存在偏差
车辆年度里程折算逻辑修正(Swift实现)
原函数的问题点
- 车辆使用年限远大于总里程时逻辑完全倒置:原代码中
carAge >= currentODO时返回carAge / currentODO,会得到远偏离实际的数值(比如104年车龄、1公里总里程,会返回104,实际应是年均不足1公里) - 新车场景(当年注册)的返回逻辑虽无错误,但需明确该场景的定义:当年注册的车辆,年度里程即为当前总里程
修正后的核心逻辑
始终以总里程 ÷ 使用年限为计算基准,仅处理两类边界情况:
- 使用年限为0(当年注册):直接返回当前总里程(当年行驶的里程即为年度里程)
- 总里程为0:返回0(无行驶记录)
- 其他情况:总里程除以使用年限,采用整数除法(若需保留小数可改为返回
Double类型)
修正后的Swift函数
func getOdoByYear(registration: Int, currentYear: Int, currentODO: Int) -> Int { guard currentODO > 0 else { return 0 } let carAge = currentYear - registration guard carAge > 0 else { // 当年注册的车辆,年度里程即为当前总里程 return currentODO } // Swift Int除法自动向下取整,符合年均里程的整数统计需求 return currentODO / carAge }
测试场景验证
- 2015年注册、250000公里:
250000 / (2024-2015) = 27777,函数返回27777,符合预期 - 1920年注册、1公里:
1 / (2024-1920) = 0,符合年均不足1公里的实际情况 - 2024年注册、500公里:直接返回500,匹配当年行驶里程的定义
内容的提问来源于stack exchange,提问作者jcmaxuser
相关产品推荐
相关产品推荐

