在Clojure中对数字进行四舍五入的最佳方法是什么?
这是一个简单的问题。但无论如何,我认为在这里回答这个问题是一个好主意,以便更快、更容易地参考 此操作:在Clojure中对数字进行四舍五入的最佳方法是什么?,clojure,rounding,Clojure,Rounding,这是一个简单的问题。但无论如何,我认为在这里回答这个问题是一个好主意,以便更快、更容易地参考 此操作: (/ 3 2) 结果如下: 3/2 我需要一个函数向上取整,它将产生2,另一个函数向下取整,它将产生1。将其转换为所需的类型 (int 3/2) => 1 (double 3/2) => 1.5 (float 3/2) => 1.5 然后将其包装在调用Math.round等中 user> (Math/round (double 3/2)) 2 user>
(/ 3 2)
结果如下:
3/2
我需要一个函数向上取整,它将产生2,另一个函数向下取整,它将产生1。将其转换为所需的类型
(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
您可以使用java互操作(Math/(floor | ceil)。例如:
试试这个,它为非负分子和正分母生成一对下限和上限:
(fn [num den] (let [q (quot num den)
r (rem num den)]
[q (if (= 0 r) q (+ 1 q))])
您还可以使用带精度的函数进行舍入
=> (with-precision 10 :rounding FLOOR (/ 1 3M))
0.3333333333M
=> (with-precision 10 :rounding CEILING (/ 1 3M))
0.3333333334M
您还拥有。
=> (with-precision 10 :rounding FLOOR (/ 1 3M))
0.3333333333M
=> (with-precision 10 :rounding CEILING (/ 1 3M))
0.3333333334M