【问题标题】:Clojure: How to get an exact answer in a function that calculates the average [duplicate]Clojure:如何在计算平均值的函数中获得准确答案[重复]
【发布时间】:2023-04-10 09:27:01
【问题描述】:

我如何得到准确的答案,而不仅仅是数字/计数

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

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

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

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

【问题讨论】:

标签: function clojure clojure-core.logic


【解决方案1】:

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

(float (aver [5 10]))

`

【讨论】:

  • OP 要求“准确”;)
  • 谢谢埃里克!你有没有机会在函数中传递它,这样你就不必在 REPL 中使用 float 了?我现在只是在尝试
  • 一种选择是为reduce 表单提供一个初始值(即浮点数),如下所示:(/ (reduce + 0.0 nums) (count nums)) 其中nums 是数字的集合(列表、向量、等)
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2021-09-24
    • 2020-06-24
    • 1970-01-01
    • 2018-09-27
    • 2021-09-25
    • 1970-01-01
    • 2019-11-01
    • 1970-01-01
    • 2022-01-22
    相关资源
    最近更新 更多