我试图让使用下面的代码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