为什么 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)
相同的结果。为什么不呢?
1
和 2
是文字。它们没有类型,除非你从上下文中给它们一个类型。
let n6 = (1 / 2) as Double
与
基本相同
let n6: Double = 1 / 2
这意味着,您告诉编译器结果是 Double
。这意味着编译器搜索具有 Double
结果的运算符 /
,这意味着它将在两个 Double
操作数上找到运算符 /
,因此将两个文字都视为类型Double
.
另一方面,
let n5 = Double(1 / 2)
是一个转换(或者更准确地说,Double
的初始化)。这意味着先对表达式 1 / 2
求值,然后再将其转换为 Double
.
与许多语言一样,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)
相同的结果。为什么不呢?
1
和 2
是文字。它们没有类型,除非你从上下文中给它们一个类型。
let n6 = (1 / 2) as Double
与
基本相同let n6: Double = 1 / 2
这意味着,您告诉编译器结果是 Double
。这意味着编译器搜索具有 Double
结果的运算符 /
,这意味着它将在两个 Double
操作数上找到运算符 /
,因此将两个文字都视为类型Double
.
另一方面,
let n5 = Double(1 / 2)
是一个转换(或者更准确地说,Double
的初始化)。这意味着先对表达式 1 / 2
求值,然后再将其转换为 Double
.