请在2024 年 Clojure 状态调查!分享您的想法。

欢迎!有关此如何运作的更多信息,请参阅关于页面。

0
Clojure
重新分类

你好,

我希望核心.typed 是正确的分类,没有“核心”可以选。

Clojure 1.10.1

(with-precision 4 1.23456) ;; 1.23456
(with-precision 4 1.23456M) ;; 1.23456M
(with-precision 4 (BigDecimal. 1.23456)) ;; 1.2345600000000001017497197608463466167449951171875M
(with-precision 4 (* 1 (BigDecimal. 1.23456))) ;; 1.235M
(with-precision 4 (+ 0 (BigDecimal. 1.23456))) ;; 1.235M

只当数字作为 * 或 + 的结果提供时,它似乎才按预期工作。

问候,
丹尼尔

有一个顶级的 Clojure 分类--core.typed 是一个特定的贡献库(虽然我不确定它属于 Clojure 的哪个子分类...亚历克斯?
你不需要设置子分类,顶级 Clojure 就可以了。

1 个答案

0

正确,根据文档字符串,"为BigDecimal操作设置精度和舍入模式"。

感谢指出这一点。为什么这样做有合理性?
它在文档中,但就人体工程学而言,这看起来像是一个特殊情况
我认为你误解了这个宏的目的 - 它在执行使用BigDecimals的数学时设置精度和舍入模式。如果你想要改变单个值的精度,BigDecimal类有Java API可以做到这一点。有关更多信息,请参阅https://docs.oracle.com/javase/8/docs/api/java/math/BigDecimal.html。如果你想要改变小数位数,你可以用以下方式做到,例如(.setScale 1.23456M 4 java.math.RoundingMode/DOWN)。
...