有人可以解释为什么 Int(total) 的差异值比 Double(total) 不同

Can someone explain why is Int(total) difrent value than Double(total)

提问人:Stefan Stojkovic 提问时间:10/28/2023 最后编辑:HangarRashStefan Stojkovic 更新时间:10/28/2023 访问量:52

问:

enter image description here

我不明白为什么 Double(total) 值是 15600 而 Int(total) 值是 15599?

func race(_ v1: Int, _ v2: Int, _ g: Int) -> [Int]? {
    var vd: Double = Double(v2) - Double(v1)
    var total = Double(3600) * (Double(g) / vd)
    var n = Int(total)
    
    var h = n / 3600
    var m = (n - (3600 * h)) / 60
    var s = (n - (m * 60) - (h * 3600))
    return [h, m, s]
}

race(243, 270, 117)
SWIFT 变量 测试 常量

评论

0赞 Claus Jørgensen 10/28/2023
发布您的代码,而不是代码的屏幕截图
0赞 Flavien Volken 10/28/2023
可能是因为您将 double 四舍五入为除法后的整数,而当值为 int 时,您直接在 int 上四舍五入。
0赞 Stefan Stojkovic 10/28/2023
在这种特殊情况下,总数已经是四舍五入的数字,但对于所有其他情况都不是,并且功能工作正常。

答:

1赞 Sulthan 10/28/2023 #1

转换初始值设定项截断所有小数位。引用文档:Int.init(Double)

作为源传递的值的任何小数部分都将被删除,并将值四舍五入为零。

的计算值是四舍五入并显示在侧面板中。但是,截断小数位会导致整数值。total15599.9999999999981560015559

如果要舍入,请使用 .Int(round(total))

评论

0赞 Duncan C 10/28/2023
同意。真正的问题是,为什么侧面板将浮点数显示为舍入值而不是双精度值?