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

Car*_*nes 32 clojure rounding

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

这个操作:

(/ 3 2)
Run Code Online (Sandbox Code Playgroud)

得出这个:

3/2
Run Code Online (Sandbox Code Playgroud)

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

cfr*_*ick 47

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

user=> (int (Math/floor (/ 3 2)))
1
user=> (int (Math/ceil (/ 3 2)))
2
Run Code Online (Sandbox Code Playgroud)


Art*_*ldt 27

把它扔到所需的类型

(int 3/2) 
=> 1
(double 3/2)
=> 1.5
(float 3/2)
=> 1.5
Run Code Online (Sandbox Code Playgroud)

然后把它包装在一个电话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
Run Code Online (Sandbox Code Playgroud)


Jos*_*aez 6

您也可以使用精度函数进行舍入

=> (with-precision 10 :rounding FLOOR (/ 1 3M))
0.3333333333M
=> (with-precision 10 :rounding CEILING (/ 1 3M))
0.3333333334M
Run Code Online (Sandbox Code Playgroud)

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