Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Clojure中对数字进行四舍五入的最佳方法是什么?_Clojure_Rounding - Fatal编程技术网

在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