请在 2024 年 Clojure 调查问卷! 分享您的想法。

欢迎!关于如何使用本网站的更多信息,请参阅 关于页面

0
Clojure
重新分类

你好,

我希望 core.typed 是正确的类别,因为没有“core”可供选择

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 是一个特定的 Contrib 库(虽然我不确定它属于 Clojure 的哪个子类别... Alex?
您不需要设置子类别,顶级 Clojure 就行。

1 回答

0

这是正确的,根据文档,“设置用于BigDecimal操作的计算精度和舍入模式”。

感谢指出。这样做的原因是什么?
这个信息在文档中,但在这个特例中看起来并不那么直观。
我想你可能误解了这个宏的作用——它设置了使用BigDecimal进行数学运算时使用的精度和舍入模式。如果你想更改单个值的精度,BigDecimal类上提供了一些Java API可以做到。请参阅https://docs.oracle.com/javase/8/docs/api/java/math/BigDecimal.html以获取更多详细信息。如果你想更改小数点后的位数,你可以使用例如(.setScale 1.23456M 4 java.math.RoundingMode/DOWN)来做到。
...