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

为何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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 13:12:06