clojure rounding

¿Cuál es la mejor manera de redondear números en Clojure?



rounding (3)

Intente esto, que produce un par del piso y el techo para un numerador no negativo y un denominador positivo:

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

Esta es una fácil. Pero de todos modos, creo que es una buena idea que se responda esta pregunta aquí para una referencia más rápida y fácil.

Esta operacion:

(/ 3 2)

produce esto:

3/2

Necesito una función para redondear hacia arriba, lo que daría 2 y otra para redondear hacia abajo, lo que daría 1.


Puede java interop (Math / (floor | ceil). Por ejemplo:

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


lanzarlo al tipo deseado

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

luego envolver eso en una llamada a Math.round etc.

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