Clojure:
Numerojen pyöristäminen
Kuinka:
Clojuressa käytämme pääasiassa Math/round
, Math/floor
ja Math/ceil
:
(Math/round 3.5) ; => 4
(Math/round 3.4) ; => 3
(Math/floor 3.7) ; => 3.0
(Math/ceil 3.2) ; => 4.0
Tietyille desimaalipaikoille me kerromme, pyöristämme ja jaamme:
(let [num 3.14159
scale 1000]
(/ (Math/round (* num scale)) scale)) ; => 3.142
Syväsukellus
Ennen hienoja ohjelmointikieliä, pyöristäminen oli manuaalinen prosessi, ajattele helmilaskinta tai paperia. Ohjelmoinnissa se on olennaista numeron esityksen kannalta liukulukujen tarkkuuden rajoitusten vuoksi.
Vaihtoehtoja pyöristämiselle ovat BigDecimal
-luokan käyttö tarkkuuden hallintaan tai kirjastot kuten clojure.math.numeric-tower
edistyneitä matemaattisia toimintoja varten. Clojuren Math/round
perustuu Javan Math.round
, Math/floor
ja Math/ceil
-funktioihin, mikä tarkoittaa, että se perii samat liuku- ja kaksoistarkkuuden nyanssit.
Toteutuksen osalta, kun pyöristät Clojuressa, muista, että se käyttää automaattisesti kaksoistarkkuutta käsitellessään desimaaleja. Varo pyöristysvirheitä!
Katso Myös
- 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
- Ymmärtäminen liukulukujen tarkkuudesta: https://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html