A rather unique and interesting feature of Clojure (and Lisp derived languages) is the first class support for rational numbers.
1/3 -5/3 (type 1/3) ;= clojure.lang.Ratio
Rational arithmetic is also supported:
(- 3/5 (+ 1/3 4/5)) ;= -8/15
And it does an automatic simplification when possible
10/25 ;= 2/5
Be careful when mixing rationals with floating point numbers as the result will default to Double (and lose precision).
(+ 1/3 0.3) ;= 0.6333333333333333 (type (+ 1/3 0.3)) ;= java.lang.Double
If you wish to preserve rationals when mixed with floating points in computations you can use the rationalize function.
(rationalize 0.3) ;= 3/10 (+ 1/3 (rationalize 0.3)) ;= 19/30 (type (+ 1/3 (rationalize 0.3))) ;= clojure.lang.Ratio
The caveats of using rational is that the performance drops drastically in favour of precision.