2011-08-18 57 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