为何Int类型的total与Double类型的total数值存在差异?
问题解析:Double转Int时的数值差异原因
你的问题核心是浮点数精度限制导致的转换差异,具体分析如下:
1. 计算过程的浮点数近似性
先看理论计算值:
- 速度差
vd = 270 - 243 = 27 - 追及时间(小时):
117 / 27 = 4.333333...(十进制无限循环小数) - 总秒数:
4.333333... × 3600 = 15600
但Double类型基于二进制浮点数实现,无法精确表示十进制的无限循环小数。117.0 / 27.0的计算结果是一个近似值,乘以3600.0后,实际存储的数值是略小于15600.0的(比如15599.999999999998),而非精确的15600.0。
2. Swift中Double转Int的规则
Swift里用Int(total)转换浮点数时,会直接截断小数部分(只保留整数位,不做四舍五入)。所以当total是15599.999999999998时,转换后就得到15599。
解决方法
如果需要得到理论上的精确整数值,可以先对浮点数进行四舍五入,再转换为Int:
var n = Int(total.rounded())
这样就能得到正确的15600。
内容的提问来源于stack exchange,提问作者user8359454
相关产品推荐
相关产品推荐

