像在许多语言中,斯威夫特的除法运算符默认为整数除法,那么:为什么快速转换适用于浮点除法?
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)'是*不是*演员;它是从“Int”到“Double”的*转换。 '(1/2)不会发生这种转换,因为整数文字只是推断为双打。比较https://stackoverflow.com/q/28813516/2976878 – Hamish
可能重复[奇怪的斯威夫特数字类型转换](https://stackoverflow.com/questions/28813516/strange-swift-numbers-type-casting) –