Clojure:
Avrundning av tal
Hur man gör:
I Clojure använder vi främst Math/round
, Math/floor
och Math/ceil
:
(Math/round 3.5) ; => 4
(Math/round 3.4) ; => 3
(Math/floor 3.7) ; => 3.0
(Math/ceil 3.2) ; => 4.0
För specifika decimalplatser multiplicerar, avrundar och dividerar vi:
(let [num 3.14159
scale 1000]
(/ (Math/round (* num scale)) scale)) ; => 3.142
Djupdykning
Innan programmeringsspråk var avrundning en manuell process, tänk abakus eller papper. I programmering är det avgörande för representation av tal på grund av begränsningar i precisionen hos flyttal.
Alternativ för avrundning inkluderar användning av klassen BigDecimal
för precisionskontroll eller bibliotek som clojure.math.numeric-tower
för avancerade matematikfunktioner. Clojures Math/round
förlitar sig på Javas Math.round
, Math/floor
och Math/ceil
funktioner, vilket innebär att det ärver samma nyanser av float och double.
När det gäller implementering, när du avrundar i Clojure, kom ihåg att det automatiskt använder dubbel precision när det hanterar decimaler. Var försiktig med avrundningsfel!
Se även
- Clojure Math API: https://clojure.github.io/clojure/clojure.core-api.html#clojure.core/math-context
- Java Math API: https://docs.oracle.com/javase/8/docs/api/java/lang/Math.html
- Att förstå precisionen hos flyttal: https://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html