【发布时间】:2017-08-03 16:35:02
【问题描述】:
与许多语言一样,Swift 的除法运算符默认为整数除法,所以:
let n = 1 / 2
print(n) // 0
如果你想要浮点除法,你必须这样做
let n1 = 1.0 / 2
let n2 = 1 / 2.0
let n3 = Double(1) / 2
let n4 = 1 / Double(2)
print(n1) // 0.5
print(n2) // 0.5
print(n3) // 0.5
print(n4) // 0.5
同样,与大多数其他语言一样,您不能强制转换整个操作:
let n5 = Double(1 / 2)
print(n5) // 0.0
发生这种情况是因为 swift 执行 1 和 2 (1 / 2) 的整数除法并得到 0,然后它会尝试将其转换为 Double,从而有效地为您提供 0.0。
我很好奇为什么以下方法有效:
let n6 = (1 / 2) as Double
print(n6) // 0.5
我觉得这应该产生与Double(1 / 2) 相同的结果。为什么不呢?
【问题讨论】:
-
Double(1 / 2)不是演员;这是从Int到Double的转换。(1 / 2) as Double不会发生这种转换,整数文字被简单地推断为双精度数。比较stackoverflow.com/q/28813516/2976878
标签: swift casting type-conversion division integer-division