计算Scala中数组的平均值-结果被截断



我已经用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.883333,因此单元测试将失败❌

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)
}

相关内容

最新更新