在 Scala 中计算数组的平均值 - 结果被截断
Calculate average of array in Scala - Result truncated
我已经用 TDD 学习 Scala 几天了,所以我有以下单元测试:
test("CalcStats.calculateAverage should return average") {
assert(CalcStats.calculateAverage(Array(6, 9, 15, -2, 92, 11)) === 21.833333)
}
据我所知,以下内容应该可以通过:
def calculateAverage(values: Array[Int]): Float = {
values.sum / values.size
}
但是,我得到的是 21.0 而不是 21.833333,所以单元测试会失败 ❌
Expected :21.833333
Actual :21.0
只要我指定结果将是一个浮点数,我认为就足够了,但事实并非如此。我应该怎么做才能避免结果被截断?
提前致谢。
在
def calculateAverage(values: Array[Int]): Float = {
values.sum / values.size}
基础结果 values.sum / values.size
的类型为 Int
(21)
因此,编译器将其扩展为 Float
。
尝试以下操作:
def calculateAverage(values: Array[Int]): Float = {
values.sum.toFloat / values.size }
此方法应该有效 - 只是一个简单的递归方法,用于添加列表中的所有值,当列表为空时,除以列表的总大小。
def getAverage(list: List[Double]): Double = {
def loop(list: List[Double], acc: Double = 0): Double = {
list match {
case Nil => acc / list.size
case element :: tail => loop(tail, acc + element)
}
}
loop(list)
}
我已经用 TDD 学习 Scala 几天了,所以我有以下单元测试:
test("CalcStats.calculateAverage should return average") {
assert(CalcStats.calculateAverage(Array(6, 9, 15, -2, 92, 11)) === 21.833333)
}
据我所知,以下内容应该可以通过:
def calculateAverage(values: Array[Int]): Float = {
values.sum / values.size
}
但是,我得到的是 21.0 而不是 21.833333,所以单元测试会失败 ❌
Expected :21.833333
Actual :21.0
只要我指定结果将是一个浮点数,我认为就足够了,但事实并非如此。我应该怎么做才能避免结果被截断?
提前致谢。
在
def calculateAverage(values: Array[Int]): Float = {
values.sum / values.size}
基础结果 values.sum / values.size
的类型为 Int
(21)
因此,编译器将其扩展为 Float
。
尝试以下操作:
def calculateAverage(values: Array[Int]): Float = {
values.sum.toFloat / values.size }
此方法应该有效 - 只是一个简单的递归方法,用于添加列表中的所有值,当列表为空时,除以列表的总大小。
def getAverage(list: List[Double]): Double = {
def loop(list: List[Double], acc: Double = 0): Double = {
list match {
case Nil => acc / list.size
case element :: tail => loop(tail, acc + element)
}
}
loop(list)
}