casting - Swift 中的 float 划分和类型转换

标签 casting swift division

我正在努力学习 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/

相关文章:

c# 将 System.Reflection.FieldInfo 转换为用户定义的类型

kotlin - 如何在 Kotlin 中对列表进行分区和类型转换

ios - 仅显示 UIView 的角

python - Numpy 数组元素除法 (1/x)

java - 为什么一个类能够转换一个只有运行时错误而不是编译器错误的不相关类

java - Java 中的类型转换

ios - NumberFormatter() 不强制小数位

ios - 当另一个维度被夹住时,SwiftUI View 如何在一个维度上调整其理想大小?

c - 分区例程

javascript - Javascript 中奇怪的划分