在clojure中将数字舍入为n位小数

在clojure中将数字舍入为n位小数,clojure,Clojure,例如,当我这样做时(/1.0 7.0),我只得到17位数字:0.14285714285714285。我怎样才能得到更多呢?使用BigDecimal数字和精确的: (with-precision 50 (/ 1M 7)) => 0.14285714285714285714285714285714285714285714285714M Clojure(以及几乎所有的Lisp)具有比率类型,这样您就不会失去精度。使用比率进行所有计算,并在最后一分钟转换为double/float以避免精度问题。

例如,当我这样做时(/1.0 7.0),我只得到17位数字:0.14285714285714285。我怎样才能得到更多呢?

使用
BigDecimal
数字和
精确的

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

Clojure(以及几乎所有的Lisp)具有比率类型,这样您就不会失去精度。使用比率进行所有计算,并在最后一分钟转换为double/float以避免精度问题。

是的,这非常简单。问这样的问题真是我的跛脚。非常感谢!请注意,即使使用精度和BigDecimal,也会在某个点舍入,并且数字142857只是无限重复。(请参阅)Clojure docs:请注意,尽管with precision参数没有指定小数位数,但指定了精度的总位数
(精度为3(/11.111m1))=>11.1M
(精度为3(/1.111m1))=>1.11M
-这是一个很小但有时很重要的差异。但是,要注意比率。例如,如果你不断重复乘以比率,你可能会得到巨大的分子和分母。这可能会变得非常缓慢,并且会占用大量内存。