像在許多語言中,斯威夫特的除法運算符默認爲整數除法,那麼:爲什麼快速轉換適用於浮點除法?
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) –