为什么 swift 转换适用于浮点除法?

Why does swift conversion work for floating point division?

与许多语言一样,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) 相同的结果。为什么不呢?

12 是文字。它们没有类型,除非你从上下文中给它们一个类型。

let n6 = (1 / 2) as Double

基本相同
let n6: Double = 1 / 2

这意味着,您告诉编译器结果是 Double。这意味着编译器搜索具有 Double 结果的运算符 /,这意味着它将在两个 Double 操作数上找到运算符 /,因此将两个文字都视为类型Double.

另一方面,

let n5 = Double(1 / 2)

是一个转换(或者更准确地说,Double 的初始化)。这意味着先对表达式 1 / 2 求值,然后再将其转换为 Double.