我試圖讓使用下面的代碼int數組的平均值:爲什麼我不能在Swift中減少內部整數?
let numbers = [1,2,3,4,5]
let avg = numbers.reduce(0) { return $0 + $1/numbers.count }
print(avg) // 1
這顯然是不正確。但是,如果我刪除分工封閉外:
let numbers = [1,2,3,4,5]
let avg = numbers.reduce(0) { return $0 + $1 }/numbers.count
print(avg) // 3
賓果!我想我還記得在某處讀過的東西(不能回想起它是否與Swift,JavaScript或編程數學有關),這與將長度除以長度產生一個浮點/雙倍的事實有關。 (1 + 2)/5 = 0.6
這將在總和內舍入爲0
。不過,我期望((1 + 2) + 3)/5 = 1.2
返回1
,但它也似乎返回0
。
隨着雙打,計算按預期工作無論怎樣它的計算,只要我箱的雙數整數
let numbers = [1.0,2.0,3.0,4.0,5.0]
let avg = numbers.reduce(0) { return $0 + $1/Double(numbers.count) }
print(avg) // 3
我想我明白了爲什麼(也許不是?)。但我不能拿出一個可靠的例子來證明這一點。
任何幫助和/或解釋是非常讚賞。謝謝。
int/int - > int':必須提升類型* first *做浮點除法。 – user2864740