gpt4 book ai didi

swift - 为什么快速转换对浮点除法有效?

转载 作者:可可西里 更新时间:2023-11-01 00:40:06 26 4
gpt4 key购买 nike

与许多语言一样,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 .

关于swift - 为什么快速转换对浮点除法有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45489997/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com