2011-08-18 20 views

回答

14

使用BigDecimal号和with-precision

(with-precision 50 (/ 1M 7)) 
=> 0.14285714285714285714285714285714285714285714285714M 
+0

是的,这非常简单。跛我问这样的问题。十分感谢! –

+0

观察,即使使用精度和BigDecimal在某个点上四舍五入,数字142857只是无限重复。 (请参阅http://en.wikipedia.org/wiki/Continued_fraction) – klang

+0

Clojure文档:['with-precision'](http://clojuredocs.org/clojure_core/clojure.core/with-precision) –

10

的Clojure(和几乎所有的Lisp)具有比类型这样你不会失去精度。按比例进行所有计算,并在最后一分钟转换为双/浮点数以避免精度问题。

+0

但是,要小心比例。例如,如果您不断重复乘数,则可能会得到巨大的分子和分母。这可能变得非常缓慢并且可以使用大量的RAM。 – Mars