swift - 无法快速执行除法功能

标签 swift average

我正在根据 swift 教程进行平均函数分配。 当我写这样的代码时:

func AVG(numbers: Int...) -> Double {
var i=0, sum=0; var avg: Double
for number in numbers {
    i+=1
    sum+=number
    avg = sum/i
}
return avg
}

let Average = AVG(numbers: 3,4,5)
print (Average)

它显示一条错误消息,显示二元运算符“/”不能应用于两个 int 操作数。

当我执行像

这样的简单除法时
let x = 5
let y = 2
let quo = x/y

有效。

我在函数中做错了什么?

最佳答案

您将 avg 声明为 Double 类型。

numbers 的类型是 Inti=0 也是 Int

当您执行 sum/i 时,它是 Int/Int 并且您尝试将其分配给 Double。 Swift 不会自动进行转换——它会强制您手动转换数据类型。 您可以通过简单地将这两个变量转换为 Double 来修复它。

请记住,您需要在进行除法之前转换 Int - 否则结果将切断提醒,因为 Int 不能拥有它们。感谢@martin

另外一个问题是,如果您的数字数组为空,您可能会尝试返回未初始化的变量 avg

下面的工作代码:

func AVG(numbers: Int...) -> Double {
    var i=0, sum=0; var avg: Double = 0
    for number in numbers {
        i+=1
        sum+=number
        avg = Double(sum)/Double(i)
    }
    return avg
}

let Average = AVG(numbers: 3,4,5)
print (Average)

关于swift - 无法快速执行除法功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43974157/

相关文章:

ios - OCMock 测试委托(delegate)方法

data-structures - 用于存储数据和计算平均值的数据结构

arrays - 知道过滤元素是一个序列,如何用另一个 Swift 数组过滤一个 Swift 数组?速度很重要

ios - Swift iOS 11 Beta 今天小部件 infoPlist.Strings 未本地化

algorithm - 如何找到环绕的两个数字的平均值?

python - 在取平均值之前筛选出负数

c - 从C中的链表中删除一些元素

Python:从文本文件导入列表并根据多列进行排序/平均

ios - 如何在swiftUI中显示登录 View 后的 View

swift - 协议(protocol)扩展初始化器