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