func avg(numbers: Int...) -> Double {
var sum = 0;
var i = 0;
for number in numbers {
sum += number;
++i;
}
return sum / i;
}
avg(42, 597, 12);
Run Code Online (Sandbox Code Playgroud)
该行return sum / i导致错误Could not find an overload for '/' that accepts the supplied arguments.
我应该在这做什么?
Con*_*nor 19
如果你想要返回一个Double,你应该在你的函数中处理双打.将sum和i更改为Doubles(0.0 vs 0)并将每个数字转换为double.像这样:
func avg(numbers: Int...) -> Double {
var sum = 0.0; //now implicitly a double
var i = 0.0;
for number in numbers {
sum += Double(number); //converts number to a double and adds it to sum.
++i;
}
return sum / i;
}
avg(42, 597, 12);
Run Code Online (Sandbox Code Playgroud)
整数和浮点转换
必须明确表示整数和浮点数字类型之间的转换:
let three = 3
let pointOneFourOneFiveNine = 0.14159
let pi = Double(three) + pointOneFourOneFiveNine
// pi equals 3.14159, and is inferred to be of type Double
Run Code Online (Sandbox Code Playgroud)
这里,常量3的值用于创建Double类型的新值,以便添加的两侧具有相同的类型.如果没有这种转换,则不允许添加.
对于浮点数到整数转换,反之亦然,因为可以使用Double或Float值初始化整数类型:
let integerPi = Int(pi)
// integerPi equals 3, and is inferred to be of type Int
Run Code Online (Sandbox Code Playgroud)
当用于以这种方式初始化新的整数值时,浮点值总是被截断.这意味着4.75变为4,-3.9变为-3.
Jea*_*nan 13
这是一个改进的答案,使用闭合的友好力量:
func avg(numbers: Int...) -> Double {
return Double(numbers.reduce(0, +)) / Double(numbers.count)
}
Run Code Online (Sandbox Code Playgroud)
Nat*_*ook 10
Swift并不像我们习惯的那样在值类型之间隐式转换,因此您sum和i变量的任何产品都将具有相同的类型.你已经隐含地将它们定义为Int,所以你需要在最终计算期间转换它们的类型,如下所示:
return Double(sum) / Double(i)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11675 次 |
| 最近记录: |