Clojure:
Zaokrąglanie liczb

Jak to zrobić:

W Clojure głównie używamy Math/round, Math/floor i Math/ceil:

(Math/round 3.5) ; => 4
(Math/round 3.4) ; => 3

(Math/floor 3.7) ; => 3.0
(Math/ceil 3.2)  ; => 4.0

Dla konkretnych miejsc po przecinku mnożymy, zaokrąglamy i dzielimy:

(let [num 3.14159
      scale 1000]
  (/ (Math/round (* num scale)) scale)) ; => 3.142

Szczegółowa analiza

Przed erą zaawansowanych języków programowania, zaokrąglanie było procesem manualnym, myśl o abakusie lub papierze. W programowaniu jest to kluczowe dla reprezentacji liczbowej ze względu na ograniczenia dokładności liczby zmiennoprzecinkowej.

Alternatywami dla zaokrąglania są użycie klasy BigDecimal do kontroli precyzji lub bibliotek jak clojure.math.numeric-tower dla zaawansowanych funkcji matematycznych. Math/round w Clojure opiera się na funkcjach Math.round, Math/floor i Math/ceil z Javy, co oznacza, że dziedziczy te same niuanse dotyczące typów float i double.

Pod kątem implementacji, pamiętaj, że przy zaokrąglaniu w Clojure automatycznie używana jest podwójna precyzja przy operacjach na liczbach dziesiętnych. Uważaj na błędy zaokrąglenia!

Zobacz również