Tom*_*ero 13 casting division swift
我正在尝试学习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)
Run Code Online (Sandbox Code Playgroud)
这给了我正确的结果:3.5但是,我想知道为什么我必须将sum和numbers.count转换为浮点数.我尝试过这种方式:
return Float(sum/numbers.count)
Run Code Online (Sandbox Code Playgroud)
但它给了我3.0
gna*_*729 30
首先,你应该使用Double而不是Float.Float为您提供非常有限的精度.为什么你会想要使用Float的6位数精度当你有15位数时使用Double很难理解.
其次,编译器完全按照您的说法执行操作.
Float (sum) / Float (numbers.count)
Run Code Online (Sandbox Code Playgroud)
取整数"sum",取整数"numbers.count",将两者都转换为Float并进行除法.Floison Divison在这种情况下给出3.5的结果.
Float (sum/numbers.count)
Run Code Online (Sandbox Code Playgroud)
将整数"sum"除以整数"numbers.count".整数除法给出一个整数结果,它是一个整数商,不考虑任何余数.21/6等于3,余数为3.因此除法的结果为3,然后转换为Float 3.0.