在Clojure中围绕数字的最佳方法是什么?

时间:2015-02-16 21:54:03

标签: clojure rounding

这很简单。但无论如何,我认为在这里回答这个问题是一个好主意,以便更快,更容易地参考。

此操作:

(/ 3 2)

得出这个:

3/2

我需要一个函数来向上舍入,这将产生2和另一个向下舍入,这将产生1。

4 个答案:

答案 0 :(得分:42)

你可以java互操作(Math /(floor | ceil)。例如:

user=> (int (Math/floor (/ 3 2)))
1
user=> (int (Math/ceil (/ 3 2)))
2

答案 1 :(得分:25)

将其转换为所需类型

(int 3/2) 
=> 1
(double 3/2)
=> 1.5
(float 3/2)
=> 1.5

然后将其包含在对Math.round等的调用中

user> (Math/round (double 3/2))
2
user> (Math/floor (double 3/2))
1.0
user> (Math/ceil (double 3/2))
2.0

答案 2 :(得分:0)

试试这个,它会为非负分子和正分母产生一对地板和天花板:

(fn [num den] (let [q (quot num den)
                    r (rem  num den)]
                [q (if (= 0 r) q (+ 1 q))])

答案 3 :(得分:0)

您还可以使用具有精确度的功能

进行取整
=> (with-precision 10 :rounding FLOOR (/ 1 3M))
0.3333333333M
=> (with-precision 10 :rounding CEILING (/ 1 3M))
0.3333333334M

https://clojuredocs.org/clojure.core/with-precision