Подтвердить что ты не робот

Каков наилучший способ округления чисел в Clojure?

Это легко. Но в любом случае, я думаю, что это хорошая идея, чтобы этот вопрос ответил здесь для более быстрой и простой справки.

Эта операция:

(/ 3 2)

дает следующее:

3/2

Мне нужна одна функция для округления, которая даст 2, а другую - округлить, что даст 1.

4b9b3361

Ответ 1

Вы можете использовать java interop (Math/(floor | ceil). Например:

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

Ответ 2

введите его в желаемый тип

(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

Ответ 3

Попробуйте это, создавая пару полов и потолков для неотрицательного числителя и положительного знаменателя:

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