swift 有人能解释一下为什么Int(total)和Double(total)的值不同吗?

xmjla07d  于 4个月前  发布在  Swift
关注(0)|答案(1)|浏览(68)


的数据
我不明白为什么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)

字符串

5cnsuln7

5cnsuln71#

Int.init(Double)转换初始化器截断所有小数位。引用文档:
作为源传递的值的任何小数部分都将被删除,并将值舍入为零。
total的计算值为15599.999999999998,其被舍入并在侧面板中显示为15600。然而,截断小数位会导致整数值15559
如果你想舍入,使用Int(round(total))

相关问题