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

Function Clojure:如何在计算平均值的函数中获得精确答案,function,clojure,clojure-core.logic,Function,Clojure,Clojure Core.logic,我怎样才能得到准确的答案,而不仅仅是数字/计数 我可以得到一系列数字的平均值,但它只会将总数相加,然后除以计数 (defn aver [numbers] (if (empty? numbers) 0 (/ (reduce + numbers) (count numbers))) ) 如果我要得到[5 10]列表的平均值,我不会得到应该是7.5的答案,我只会得到等式,否则我怎么得到呢 >(aver [5 10]) => 15/2 您

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

我可以得到一系列数字的平均值,但它只会将总数相加,然后除以计数

(defn aver
  [numbers]
    (if (empty? numbers)
      0
      (/ (reduce + numbers) (count numbers)))
      )
如果我要得到[5 10]列表的平均值,我不会得到应该是7.5的答案,我只会得到等式,否则我怎么得到呢

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

您可以使用
bicdec
获得该比率的精确表示。例如

user=>(让[numbers[12]](bigdec(/(reduce+numbers)(countnumbers)))
1.25米

Clojure中的整数除法给出有理数。如果需要浮点数,其中一个参数必须是浮点数。或者,您可以将结果传递到
float

(浮动(平均[5 10]))


`

OP请求的“精确”;)谢谢你,埃里克!有没有可能在函数中传递它,这样就不必在REPL中使用float?我只是在试验momentOne选项,它将为
reduce
表单提供一个初始值(即浮点值),如下所示:
(/(reduce+0.0 nums)(count nums))
其中
nums
是一个数字集合(列表、向量等),它不是一个等式,而是精确分数的文本表示。这是一个与你所期望的一样精确的数字。请特别注意“传染”部分