2

Clojure新手在这里。使用 clojure 1.4.0 REPL;

(== 2    2.0)      ; true
(== 2.0  2.0M)     ; true
(== 2    2.0M)     ; false

这不是违反逻辑吗?如果前两个是真的,那么第三个不也是真的吗?

4

2 回答 2

1

bigDecimals 仅当它们的值和比例相同时才被认为是相等的,在这种情况下,它们中的一个比另一个具有更多的有效数字:

user> (== 2 (. 2.0M stripTrailingZeros))
true
user> (== 2 2.0M )
false

甚至在大小数之间也会出现一个更荒谬的例子:

user> (== 0.000000M 0.0M)
false

我个人认为这在数学意义上是“错误的”,并打开了这个错误,看看是否有兴趣改变它。

于 2012-11-30T19:45:34.403 回答
1

==type-independent,试试这个:

user=> (== (bigdec 2.0) 2.0M)
true
user=> (type (bigdec 2.0))
java.math.BigDecimal
user=> (type 2.0M)
java.math.BigDecimal
于 2012-11-30T03:50:27.667 回答