Clojure:如何在计算平均值的函数中获得准确答案

Clojure: How to get an exact answer in a function that calculates the average

我怎样才能得到确切的答案,而不仅仅是数字/计数

我可以获得一列数字的平均值,但它只会将总数相加并除以计数

(defn aver
  [numbers]
    (if (empty? numbers)
      0
      (/ (reduce + numbers) (count numbers)))
      )

如果我要得到 [5 10] 列表的平均值,我将得不到应该为 7.5 的答案,我只会得到方程式,否则我该如何得到?

 >(aver [5 10])
=> 15/2

您可以使用 bicdec 来准确表示该比率。例如

user=> (let [numbers [1 1 1 2]] (bigdec (/ (reduce + numbers) (count numbers))))
1.25M

Clojure 中的整数除法为您提供有理数。如果你想要浮点数,参数之一必须是浮点数。或者,您可以将结果传递给 float.

(float (aver [5 10]))

`