我正在努力学习 Swift,我做了一个简单的平均函数:
func average(numbers: Int...) -> Float {
var sum = 0
for number in numbers {
sum += number
}
return Float(sum)/Float(numbers.count)
}
average(1,2,3,4,5,6)
这给了我正确的结果:3.5 但是,我想知道为什么我必须将 sum 和 numbers.count 都转换为 float 。我试过这样转换:
return Float(sum/numbers.count)
但它只给了我 3.0
最佳答案
首先,您应该使用 Double 而不是 Float。 Float 给你的精度非常有限。为什么在 Double 可以有 15 位数字的情况下,Float 需要 6 位数字的精度很难理解。
其次,编译器完全按照您的指示进行操作。
Float (sum) / Float (numbers.count)
取整数“sum”,取整数“numbers.count”,同时转换为 float 和除法。在这种情况下, float 除法给出的结果为 3.5。
Float (sum/numbers.count)
用整数“sum”除以整数“numbers.count”。整数除法给出一个整数 结果,它是忽略任何余数的整数商。 21/6 等于 3,余数为 3。因此除法结果为 3,然后将其转换为 Float 3.0。
关于casting - Swift 中的 float 划分和类型转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25150602/